您好,我想知道如何访问用户电子邮件,同时通过我的android应用程序中的Github验证用户。我使用的是firebase和android studio。请注意,我不能在onSuccesslistner
中使用user.getEmail
,因为我也在使用谷歌身份验证,它抛出异常,即电子邮件已经存在,挂起的任务方法只在第一次工作。基本上,我想使用setScopes
来检索用户电子邮件。我必须得到电子邮件,并检查用户是否存在于我的数据库中的简单登录的用户。
以下是我的代码:
public void git_login(View view)
{
SignInWithGithubProvider(
OAuthProvider.newBuilder("github.com")
.setScopes(
new ArrayList<String>()
{
{
add("user:email");
}
}).build()
);
}
private void SignInWithGithubProvider(OAuthProvider login)
{
Task<AuthResult> pendingResultTask= mAuth.getPendingAuthResult();
if (pendingResultTask!=null)
{
// There's something already here! Finish the sign-in for your user.
pendingResultTask
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Toast.makeText(getApplicationContext(), "User Exist" + authResult, Toast.LENGTH_SHORT).show();
// User is signed in.
// IdP data available in
// authResult.getAdditionalUserInfo().getProfile().
// The OAuth access token can also be retrieved:
// authResult.getCredential().getAccessToken().
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handle failure.
}
});
}
else {
// There's no pending result so you need to start the sign-in flow.
// See below.
mAuth.startActivityForSignInWithProvider(this , login).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e)
{
if (e.toString().equals("com.google.firebase.auth.FirebaseAuthUserCollisionException: An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address."))
{
showDialogAlert();
}
}
}).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
FirebaseUser user = mAuth.getCurrentUser();
Toast.makeText(getApplicationContext(), "Login" + user.getUid() +"\n"+user.getEmail(), Toast.LENGTH_SHORT).show();
userNameForDb = user.getDisplayName();
userImageForDb = String.valueOf(user.getPhotoUrl());
userEmailForDb = user.getEmail();
Toast.makeText(CreateNewAccountActivity.this, "Account added to Firebase: " +userNameForDb+"\n"+userEmailForDb+"\n"+userTokenForDb, Toast.LENGTH_SHORT).show();
saveDataToDb(userNameForDb , userEmailForDb , userTokenForDb);
}
});
}
}
发布于 2021-03-30 20:25:36
我想知道如何在通过Github对用户进行身份验证时访问用户电子邮件
我能想到的最简单的解决方案是,一旦您成功地通过了身份验证,您就可以从"userInfo“对象中获取电子邮件地址,如以下代码行所示:
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) {
for (UserInfo userInfo : firebaseUser.getProviderData()) {
if (userInfo.getProviderId().equals("github.com")) {
Log.d(TAG, "User is signed in with Github");
Log.d(TAG, "email: " + userInfo.getEmail());
}
}
}
logcat中的输出将是用户用于身份验证过程的电子邮件地址。
编辑:
这是真的,如果用户已经注册了一个Gmail帐户,你会得到一个异常,说这样的帐户已经存在。因此,您需要使用Google凭证进行身份验证。
在这种情况下,我实际上想要获取用户id,并希望在我的数据库中检查它,该数据库是我的本地服务器,即这封电子邮件是否存在。
。
不需要这样做,因为您可以处理异常,并向用户表明Google帐户已经存在,然后只需使用Google凭据进行身份验证。如果没有例外,很明显这个用户还不存在。
https://stackoverflow.com/questions/66870207
复制相似问题