Closed8
Firebase v9 firebaseAuth: 初回ログインユーザーかどうか見分ける

flutterの記事だけど、AdditionalUserInfoにisNewUserという属性があるみたい。

調べたらjsでも出てきた

AdditionalUserInfo: { isNewUser: boolean; profile: Object | null; providerId: string; username?: string | null }

あるのは分かったけどどこから呼び出せばいいんだ?

あった。
また、上記コードにおけるresult(firebase.auth.AuthCredential型)におけるuserプロパティはfirebase.User型ですが、より詳細なユーザー情報を取得するためにadditionalUserInfoプロパティも用意されています。
AuthCredentialを含むresultから引っ張ればいいんですね

import { getAdditionalUserInfo } from 'firebase/auth';
export const googleLogin = async () => {
await signInWithPopup(auth, provider)
.then((result) => {
console.log('google resolved');
// getAdditionalUserInfo()の引数はUserCredentialなので
const isNewUser = getAdditionalUserInfo(result)?.isNewUser
console.log(isNewUser)
})
.catch((e: any) => {
alert(e.message);
});
};
これで取得できた!!

・1回目:過去にログイン実績あるユーザー
console.log(isNewUser)
=> false
・2回目:過去にログイン実績ないユーザー(firebaseコンソールでアカウント削除して実行)
console.log(isNewUser)
=> true

取得した値を使用しての実装例(Next.js)
export const googleLogin = async () => {
await signInWithPopup(auth, provider)
.then((result) => {
console.log('google resolved');
//初回ログインかどうかによって'/onboarding'か'/community'に遷移させる
const isNewUser = getAdditionalUserInfo(result)?.isNewUser;
console.log(isNewUser);
isNewUser ? Router.push('/onboarding') : Router.push('community');
})
.catch((e: any) => {
alert(e.message);
});
};
このスクラップは2021/11/11にクローズされました
ログインするとコメントできます