REACT

gapi oauth2 - google Calendar

user-anonymous 2020. 9. 15. 13:35
728x90

GAPI is Google's client library for browser-side JavaScript. It's used in Google Sign-in, Google Drive, and thousands of internal and external web pages for easily connecting with Google APIs.

 

gapi 란  브라우저 쪽 자바스크립트를 위한 구글에서 제공해주는 클라이언트 라이브러리다. gapi는 구글 로그인, 드라이브 등 api를 쉽게 연결할 수 있도록 도와준다. 나는 리액트를 이용하여 gapi Google Calendar와 FullCalendar을 연동 시켰다.

 

1. index.html

index.html에 gapi를 로드하기 위해 

  <script src="https://apis.google.com/js/client.js"></script>  

를 넣어준다. 이 외의 npm을 이용해서 설치하는 방법들도 있다. 

 

2. gapi

먼저 gapi를 사용하기 위해 gapi를 선언해주고  

var gapi = window.gapi  

 

//gapi.auth2.init이나 다른 api를 호출하기 위한 준비단계 (load)     
    gapi.load('auth2', () => {

                var gauth = gapi.auth2.init({

                    apiKey: '[API_KEY]',

                    clientId: '[CLIENT_ID]',

                    scope: 'https://www.googleapis.com/auth/calendar',

                    discoveryDocs: 'https://www.googleapis.com/discove ry/v1/apis/calendar/v3/rest',

                });

- gapi.auth2.init
GoogleAuth 오브젝트를 초기화 시켜주는 것이다. 이 init 메소드는 auth2.GoogleAuth 메소드 보다 빨리 호출해줘야한다.
초기화 시켜주기 위해선 OAuth2.0 clientId와 구체적으로 기입하고 싶은 추가적 메소드를 사용하면 된다. 이때 난 
초기설정에 scop가 아니라 "scopes"를 쳐서 계속 
 
Insufficient Permission: Request had insufficient authentication scopes 

이 에러가 한 시간 넘게 나의 삽질의 원동력이 되어줬다.

 - clientId를 만드는 방법은

console.developers.google.com/apis/dashboard

이곳에서 Google Calendar API 를 추가해준 다음 [사용자 인증정보] 로 들어가서 Redirct_URL에 리다이렉트 해줄 url을 기입해준다.

 

http://localhost:3000/accounts/google/login/callback

 

*** 이때 redirect_url을 지정해줄땐 ip주소로 하면 인식이 안된다. 그러므로 DNS (.com)으로 끝나는 주소를 입력해줘야한다. 하지만 ip주소를 입력해주는 방법 중 하나는 xip.io라고 ip주소를 dns로 제공해주는 서비스가 있다. 그러므로 

x.x.x.x/xip.io:포트번호 이렇게 될 경우 googleRedirect_url 에 인식을 해준다.

 

xip.io is a magic domain name that provides wildcard DNS for any IP address. Say your LAN IP address is 10.0.0.1. Using xip.io,

 

 

만약 이 곳이 잘못되어있다면 

 [Error : redirect_uri_mismatch ] 에러가 발생한다. 

 

그리고 google API KEY도 발급받아주면 된다.

 

  var gauth = gapi.auth2.getAuthInstance();
    gauth.signIn().then(function() {
                     var event = {
                        summary: "요약",
                        description: reason,
                        start: {
                            dateTime: start + 'T20:00:00',
                            timeZone: 'Asia/Seoul',
                        },
                        end: {
                            dateTime: end + 'T20:00:00',
                            timeZone: 'Asia/Seoul',
                        },
                        recurrence: ['RRULE:FREQ=DAILY;COUNT=2'],
                        attendees: [{ email: 'test@example.com' }, { email: 'test@example.com' }],
                        reminders: {
                            useDefault: false,
                            overrides: [
                                { method: 'email', minutes: 24 * 60 },
                                { method: 'popup', minutes: 10 },
                            ],
                        },
                    };
                    var request = gapi.client.calendar.events.insert({
                        calendarId: 'writer@example.com',
                        resource: event,
                    });

 

그다음 var gauth = gapi.auth2.getAuthInstance();

gapi의 인증정보를 받아온 다음 

gauth.signIn() 으로 로그인을 한 후 insert해줄 이벤트를 등록한다. 

그다음 gapi.client.calendar.events.insert를 하고 이벤트를 insert해줄 캘린더 ID를 넣으면

등록이 되는걸 볼 수가 있다.

 - 참고자료

1. github.com/google/google-api-javascript-client/blob/master/docs/start.md

 

google/google-api-javascript-client

Google APIs Client Library for browser JavaScript, aka gapi. - google/google-api-javascript-client

github.com

 

728x90
반응형

'REACT' 카테고리의 다른 글

FullCalendar --값 가져오기  (0) 2020.12.23
AWS- appspec.yml root  (0) 2020.09.24
React / 환경변수 설정 DefinePlugin  (0) 2020.08.11
[리액트,React] Props 부모-자식 전달  (0) 2020.08.10
React // Object.map is not a function  (0) 2020.08.10