구글로그인 구현 순서
- 인가코드 발급
- 로그인토큰 발급
- 사용자 정보 받기
https://accounts.google.com/o/oauth2/v2/auth
?client_id=${process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID}
&redirect_uri=${process.env.NEXT_PUBLIC_REDIRECT_URL}
&response_type=code
&scope=email profile
구글 로그인창 호출 필수 파라미터
사용자가 페이지 진입전 서버단에서 먼저 처리하기 위한 SSR
export const getServerSideProps = async ({ query }) => {
// GOOGLE 토큰 정보 조회
const getTokenInfo = await axios({
method: 'POST',
url: 'https://oauth2.googleapis.com/token',
data: {
grant_type: 'authorization_code',
client_id: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
client_secret: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_SECRET,
redirect_uri: `${process.env.NEXT_PUBLIC_REDIRECT_URL}/google`,
code: query.code,
access_type: 'offline',
prompt: 'consent',
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
});
}
// 응답 성공 시 출력 정보
{
access_token: 'asdfasdfasdfasdf'
expires_in: '30230'
scope: 'asdfasdf'
token_type: 'Bearer'
id_token: 'asdfasdf'
}
구글 토큰 정보 조회 request
// GOOGLE 프로필 정보 조회
const getProfile = await axios({
method: 'GET',
url: 'https://www.googleapis.com/oauth2/v3/userinfo',
params: {
access_token: getLoginToken.data.access_token,
},
});
// 응답 성공 시 출력 정보
{
sub: '1354315',
name: 'asd',
given_name: 'asd',
family_name: 'asd',
picture: 'https://lh3.googleusercontent.com/a/ACg8ocLcWGDZOGv560HyQIOatWSlqKZ4KA552xISUHACPpvIXsVrhQ=s96-c',
email: 'eksh2@gmail.com',
email_verified: true
}