Dar*_*ren 8 javascript firebase reactjs firebase-authentication google-cloud-firestore
我正在使用 Firebase 在我们的应用程序中使用GoogleAuthProvider
. 但是,如果新用户还不是经过身份验证的用户,我不希望他们登录。
如果用户存在,则将其登录并console.log('user ' + user.email + ' does exist!');
。
但是,如果用户不存在。然后不允许身份验证和console.log('user ' + user.email + ' does not exist!')
var googleProvider = new firebase.auth.GoogleAuthProvider();
export const doSignInWithGoogle = () => auth.signInWithPopup(googleProvider);
googleLogin = () => {
auth
.doSignInWithGoogle()
.then(result => {
var user = result.user;
const userRef = db.collection('users').doc(user.uid);
userRef.get().then(docSnapshot => {
if (docSnapshot.exists) {
userRef.onSnapshot(() => {
console.log('user ' + user.email + ' does exist!');
});
} else {
console.log('user ' + user.email + ' does not exist!');
}
});
})
.catch(error => {
this.setState(updateByPropertyName('error', error));
});
};
Run Code Online (Sandbox Code Playgroud)
我认为在 Firestore 中引用用户记录是一种简单的方法。但是,也许 Firebase Auth 已经有办法做到这一点。我找不到文档或任何示例。
在上面的代码中,没有记录任何内容,并且用户被创建或登录。
如何阻止新用户注册,同时仍允许当前用户登录?
Lak*_*n S 15
如果你真的想使用signInWithPopup
方法,你有这个选项,但这不是最好的方法。当您使用 google 登录时,signInWithPopup
方法会返回一个承诺。您可以从结果对象访问该isNewUser
属性additionalUserInfo
。然后删除您刚刚创建的用户。
firebase.auth().signInWithPopup(provider).then(
function (result) {
var token = result.credential.accessToken;
var user = result.user;
//this is what you need
var isNewUser = result.additionalUserInfo.isNewUser;
if (isNewUser) {
//delete the created user
result.user.delete();
} else {
// your sign in flow
console.log('user ' + user.email + ' does exist!');
}
}).catch(function (error) {
// Handle Errors here.
});
Run Code Online (Sandbox Code Playgroud)
这是简单的方法,但创建后删除不是最佳做法。还有一个选择,
你可以使用,signInAndRetrieveDataWithCredential
方法。根据文档,
auth/user-not-found
如果使用来自的凭据登录firebase.auth.EmailAuthProvider.credential
并且没有与给定电子邮件对应的用户,则将被抛出 。
function googleSignInWithCredentials(id_token) {
// Build Firebase credential with the Google ID token.
var credential = firebase.auth.GoogleAuthProvider.credential(id_token);
// Sign in with credential from the Google user.
firebase.auth().signInAndRetrieveDataWithCredential(credential)
.then(function (userCredential) {
//sign in
console.log(userCredential.additionalUserInfo.username);
}).catch(function (error) {
// Handle Errors here.
var errorCode = error.code;
if (errorCode === 'auth/user-not-found') {
//handle this
} else {
console.error(error);
}
});
}
Run Code Online (Sandbox Code Playgroud)
这是来自 firebase github repo 的示例。
归档时间: |
|
查看次数: |
3127 次 |
最近记录: |