Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vsCode
- 프론트
- plugin
- login
- 회고록
- 토이프로젝트
- 플러그인
- Docker
- jwt
- 배포
- vue
- 기획
- vuex
- extension
- 로그인
- react
- 신상마켓
- Git
- database
- react-query
- 뷰
- nginx
- PWA
- Firebase
- express
- 정리
- vue login
- javascript
- AWS
- 셋팅
Archives
- Today
- Total
강디너의 개발 일지
Vue - google OAuth2 로그인 및 Youtube 연동 본문
728x90
Vue 에서 google OAuth 로그인을 위해서 mount 된 후 renderGoogleLoginButton 가 적용되게 했다.
하지만 mount 되는 속도보다 google API를 불러오는 속도가 느려서 오류가 나는 현상(gapi is not defined)이 자주 발생했다.
내생각 : Script Load -> mounted -> gapi render
하지만 : mounted -> gapi is not defined -> Script Load
mounted 가 더 빨라서 강제로 스크립트를 먼저 로드한 후 gapi 를 호출해야 했다.
<meta name="google-signin-client_id" content="945431733283-a4tf33jpvkabm0c1d56rqj96lu4i8iet.apps.googleusercontent.com">
<meta name="google-signin-fetch_basic_profile" content="email profile openid">
<meta name="google-signin-scope" content="https://www.googleapis.com/auth/youtube">
<script type="text/javascript">
function triggerGoogleLoaded() {
window.dispatchEvent(new Event("google-loaded"));
}
</script>
<script src="https://apis.google.com/js/platform.js?onload=triggerGoogleLoaded" async defer></script>
<template>
<div class="login_container">
<div class="g-signin2" id="google-signin-btn"></div>
</div>
</template>
mounted() {
window.addEventListener("google-loaded", this.renderGoogleLoginButton);
},
methods: {
renderGoogleLoginButton() {
gapi.signin2.render("google-signin-btn", {
'width': 240,
'height': 50,
longtitle: true,
theme: 'dark',
onsuccess: this.onSignIn,
});
},
onSignIn (user) {
const profile = user.getBasicProfile();
const token = user.getAuthResponse().access_token;
this.$store.commit('loginUser', profile);
this.$store.commit('setToken', token);
this.$router.push('/');
},
},
강제로 스크립트가 로드가 완료되면 실행되는 트리거를 넣었고, 그 후에 renderGoogleLoginButton 이 실행되도록 설정하였다.
Youtube PlayList 에 접근하려면 OAuth 토큰이 필요하다.
Youtube PlayList 추가
export function addPlayList(name) {
axios.defaults.headers['authorization'] = `Bearer ${Store.state.accessToken}`;
const data = {
snippet: {
title: 'Deali_Music',
description: `Dealicious ${name}`,
},
};
return axios.post(`https://www.googleapis.com/youtube/v3/playlists?part=snippet`, data);
}
헤더에 authorization 을 넣어야하며 값으로 OAuth 토큰을 넣어야한다.
Google Cloud 설정
youtube 를 넣어주셔야합니다 !
반응형
'Javascript > 삽질' 카테고리의 다른 글
Firebase Database CRUD (0) | 2020.02.17 |
---|---|
javascript - AWS Lambda 를 이용해서 크롤링하기 (0) | 2020.01.27 |
javascript - Comma 만들기 (0) | 2019.09.11 |
주니어 개발자의 어뷰징? 대응하기 (0) | 2019.05.31 |
코드로 보는 GraqhQL 예제 (0) | 2019.05.30 |
Comments