Firebase Authentication의 Outh를 Capacitor에서 이동하는 방법 선택
Capacitor에 포함된 것은 독립된 WebView이기 때문에 여기에 적힌 바와 같이 Oauuth를 시도하면 다음과 같은 문제가 발생합니다.
- Google などの認証プロバイダは WebView 内でのアクセスを弾く (参考)
- 認証プロバイダからのコールバックが端末のデフォルトブラウザで開かれてしまい、ネイティブアプリに戻ってこれない
이 과제를 해결하기 위해'그래도 웹뷰에서 인증하고 싶다'는 것도 하나의 방법이다Capacitor 플러그인을 함께 사용하면'인증 제공자 앱(예를 들어 페이스북 로그인 시 페이스북 앱)을 사용하는 경우 앱을 통해 인증을 하지 않으면 웹뷰를 통해 인증'등의 처리를 할 수 있다.Sign in With Apple
https://github.com/capacitor-community/apple-sign-in 웹 또는 iOS에서 Sign in With Apple을 사용할 수 있습니다.이거랑 Firebase Authentication 조합해보세요.
다음과 같이 진행할 수 있다.
// 1. SignInWithAppleを行い、ログイントークンを取得
const appleLogin: SignInWithAppleResponse = await SignInWithApple.authorize().catch(() => undefined);
if (appleLogin === undefined) {
throw 'ログインが行われませんでした';
}
// 2. Firebase AuthenticationのOAuthProviderにトークンをセットしてFirebaseで利用できる形式に
const provider = new OAuthProvider('apple.com');
const credential = provider.credential({
idToken: appleLogin.response.identityToken,
});
if (type === 'new') {
// 3. OAuthProviderを用いて、ユーザの作成
const currentUser = await signInWithCredential(this.afAuth, credential)
} else {
// (もしくは既存ユーザにログインを追加)
const currentUser = await linkWithCredential(this.afAuth.currentUser, credential)
}
Outh의 영패를Firebase AuthenticationOAuthProvider
에 설정하면'WebView 리디렉션'과 같은 처리를 할 수 있다.Facebook Login
https://github.com/capacitor-community/facebook-login.
// 1. Facebookログインを行い、ログイントークンを取得
const FACEBOOK_PERMISSIONS = ['email', 'public_profile'];
const event = await FacebookLogin.login({
permissions: FACEBOOK_PERMISSIONS,
}).catch(() => undefined);
if (event === undefined) {
throw 'ログインが行われませんでした';
}
// 2. Firebase AuthenticationのFacebookAuthProviderにトークンをセットしてFirebaseで利用できる形式に
const credential = FacebookAuthProvider.credential(event.accessToken.token);
if (type === 'new') {
// 3. OAuthProviderを用いて、ユーザの作成
const currentUser = await signInWithCredential(this.afAuth, credential)
} else {
// (もしくは既存ユーザにログインを追加)
const currentUser = await linkWithCredential(this.afAuth.currentUser, credential)
}
FacebookAuthProvider
와 new OAuthProvider('facebook.com')
는 같다.Google Auth
https://github.com/CodetrixStudio/CapacitorGoogleAuth.다만, Google Auth에 해당되는 제품이 없기 때문에 대개 이렇기 때문에 실행 코드 없이 작성했습니다.
// 1. SignInWithAppleを行い、ログイントークンを取得
const googleUser = await GoogleAuth.signIn().catch(() => undefined);
if (googleUser === undefined) {
throw 'ログインが行われませんでした';
}
// 2. Firebase AuthenticationのOAuthProviderにトークンをセットしてFirebaseで利用できる形式に
const credential = GoogleAuthProvider.credential(googleUser.authentication.idToken);
if (type === 'new') {
// 3. OAuthProviderを用いて、ユーザの作成
const currentUser = await signInWithCredential(this.afAuth, credential)
} else {
// (もしくは既存ユーザにログインを追加)
const currentUser = await linkWithCredential(this.afAuth.currentUser, credential)
}
총결산
상기 플러그인을 사용하는 방법은 모든 플러그인에 대한 로컬 행위 설정도 있고 번거롭기도 합니다.그러나 웹 버전과 로컬 응용 버전의 행위는 같은 코드로 실현할 수 있어 개인이 좋아하는 수법이다.참고로 이것은 웹 퍼스트에서 최소한의 플러그인에 의존하는 방법이다
채택도 가능합니다.어떻게 실행할지 상상하면서 방법을 고르고 싶어요.
그럼 안녕히 계세요.
Reference
이 문제에 관하여(Firebase Authentication의 Outh를 Capacitor에서 이동하는 방법 선택), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/rdlabo/articles/0dd69cc205c076텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)