我正在制作一个带有 expo 的应用程序,我想使用电子邮件/密码或使用谷歌在应用程序中进行身份验证。
我使用此代码添加了电子邮件和密码身份验证:
// this is the function for initiating firebase
function init_firebase(){
const firebaseConfig = {
apiKey: ' AIzaSyCs-qNMrjikN5VqKdY737K22QSsT9MmtGI ',
authDomain: 'tiod-app.firebaseapp.com',
databaseURL: 'https://tiod-app-default-rtdb.europe-west1.firebasedatabase.app/',
projectId: 'tiod-app',
appId: '1:659850692368:android:bf812065131d214dfb0795',
};
const app = initializeApp(firebaseConfig);
const auth = initializeAuth(app, {
persistence: getReactNativePersistence(ReactNativeAsyncStorage)
});
return {app, auth};
}
export const firebase = init_firebase();
和
// the function for signing up
async function Signup_email(navigation: NavigationProp<ParamListBase>, email: string, password: string){
const login = await createUserWithEmailAndPassword(firebase.auth, email, password).catch((e) => {
console.log(e);
});
if (login){return;}
navigation.navigate('Main', {email});
}
// the function for logging in
async function Login_email(navigation: NavigationProp<ParamListBase>, email: string, password: string,
){
const app = firebase;
if (!app){return;}
const login = await signInWithEmailAndPassword(app.auth, email, password).catch((e) => {console.log(e)});
if (!login){return;}
navigation.navigate('Loading', login.user.toJSON());
}
并且效果很好,但是对于谷歌身份验证,我意识到用于重定向登录的函数(
signInWithRedirect
)是未定义的,因为它会影响 DOM。
所以我用
@react-native-google-signin/google-signin
尝试做同样的事情。我设法
使用谷歌使用此代码登录:
async function Login_google(navigation: NavigationProp<ParamListBase>){
const result = await GoogleSignin.signIn().catch((e) => {console.log(e)});
if (!result){return;}
navigation.navigate('Loading', result.user);
}
另外,我在 main 中配置了 google 登录
GoogleSignin.configure({webClientId: "659850692368-bf2itlqkbbroq5cd3e8lq969qtk8ks5i.apps.googleusercontent.com",
googleServicePlistPath: "../GoogleService-Info.plist",
})
但是由于某种原因,使用 google 登录后firebase 中的用户仪表板仍然是空的
使用google登录登录后,您还需要使用
GoogleAuthProvider.credential
登录google。
这是我修复身份验证功能的方法:
async function Login_google(navigation: NavigationProp<ParamListBase>){
const login = await GoogleSignin.signIn();
const credential = GoogleAuthProvider.credential(login.idToken);
const result = await signInWithCredential(firebase.auth, credential);
navigation.navigate('Loading', result.user.toJSON());
}