React Native에서 구글 로그인 하는 방법
9:39 am
이 포스팅은 React Native 환경에서 Firebase Authentication을 사용하여 소셜 로그인을 하는 방법을 다루고 있습니다.
구글 로그인 설정하기
– 패키지 설치
yarn add @react-native-firebase/auth
yarn add @react-native-google-signin/google-signin
– 설정 초기화
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
useEffect(() => {
GoogleSignin.configure({
webClientId: 'XXX.apps.googleusercontent.com',
});
}, [])
– 디지털 지문 (Firebase/Android)
파이어베이스에 android 프로젝트 추가 시, 입력해야하는 디지털 지문을 출력하는 명령어입니다. 안드로이드 스튜디오에서 생성한 키 파일이 있다는 가정 하에 해당 명령어를 실행합니다.
keytool -list -v -keystore ./android/app/<keyfile>
– URL 스키마 (Firebase/iOS)
파이어베이스에 ios/android/web 프로젝트 추가 후, 제공되는 client_id 값입니다.
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.XXX</string>
</array>
구글 로그인 함수 만들기
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
export async function signInWithGoogle() {
try {
await GoogleSignin.hasPlayServices({
showPlayServicesUpdateDialog: true,
});
const userInfo = await GoogleSignin.signIn();
const googleCredential = auth.GoogleAuthProvider.credential(
userInfo.idToken,
);
const userCredential = await auth().signInWithCredential(googleCredential);
return userCredential.user;
} catch (e) {
console.log(e);
}
return response;
}
– 구글 로그인이 가능한지 확인
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
await GoogleSignin.hasPlayServices({
showPlayServicesUpdateDialog: true,
});
– 구글 로그인 시도
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
const signedUser = await GoogleSignin.signIn();
– 구글 로그인 인증 토큰 발급
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
const googleCredential = auth.GoogleAuthProvider.credential(
signedUser.idToken,
);
– 사용자 정보 획득
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
const userCredential = await auth().signInWithCredential(googleCredential);
구글 로그인 후, 사용자 데이터 저장하기
– 패키지 설치
yarn add recoil
yarn add react-native-mmkv
– 사용자 상태값 만들기
export const userState = atom({
key: 'userState',
default: null,
});
– 사용자 데이터 저장하기
import {MMKV} from 'react-native-mmkv';
import {useRecoilState} from 'recoil';
import {userState} from '@/stores/user';
const storage = new MMKV();
const XXXScreen = () => {
const [user, setUser] = useRecoilState(userState);
const handlePressSignInWithGoogle = () => {
const {data: signedUser} = await signInWithGoogle();
storage.set('user', JSON.stringify(signedUser));
setUser(signedUser);
}
return (
<TouchableOpacity onPress={handlePressSignInWithGoogle}>
<Text>Sign in with Google</Text>
</TouchableOpacity>
);
}
구글 로그인 후, 로그아웃 하기
– 구글 로그아웃 / 파이어베이스 로그아웃
import auth from '@react-native-firebase/auth';
import {GoogleSignin} from '@react-native-google-signin/google-signin';
await GoogleSignin.signOut();
await auth().signOut();