gpt4 book ai didi

java - 通过在没有 SharedPreferences 的情况下使用 Google 登录自动登录

转载 作者:行者123 更新时间:2023-11-30 04:53:59 27 4
gpt4 key购买 nike

我尝试将静默登录实现为 mentioned here

我试过通过正则表达式限制其他域登录,不知道有没有其他方法,我在Firebase登录中看到了'hd'参数,但是实现不成功。

编辑 1:固定代码,现在静默登录不起作用。代码是多余的,GoogleApiClient 也已弃用。

我已经看到使用 SharedPreferences 保存登录 token 的答案,但是保存 token 安全吗?

我关注了 documentation here

主 Activity .java

        mAuth = FirebaseAuth.getInstance();

if(mAuth.getCurrentUser() != null) {
silentLogin();
}

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();

//Show sign-in and sign-out buttons

public void silentLogin() {
OptionalPendingResult<GoogleSignInResult> pendingResult =
Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (pendingResult != null) {
handleGooglePendingResult(pendingResult);
} else {
signIn();
}
}
private void handleGooglePendingResult(OptionalPendingResult<GoogleSignInResult> pendingResult) {
if (pendingResult.isDone()) {
GoogleSignInResult signInResult = pendingResult.get();
onSilentSignInCompleted(signInResult);
} else {
pendingResult.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult signInResult) {
onSilentSignInCompleted(signInResult);
}
});
}
}

private void onSilentSignInCompleted(GoogleSignInResult signInResult) {
GoogleSignInAccount signInAccount = signInResult.getSignInAccount();
if (signInAccount != null) {
//Show sign out button
}
else {
signIn();
}
}

private void signIn(){
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, RC_SIGN_IN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_SIGN_IN){
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}
}

private void handleSignInResult(Task<GoogleSignInAccount> completedTask){
try{
GoogleSignInAccount acc = completedTask.getResult(ApiException.class);
FirebaseGoogleAuth(acc);
}
catch (ApiException e){
//Show error
FirebaseGoogleAuth(null);
}
}

private void FirebaseGoogleAuth(GoogleSignInAccount acct) {
if (acct != null) {
AuthCredential authCredential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(authCredential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
updateUI(null);
}
}
});
}
else{
// Auth failed
}
}

private void updateUI(FirebaseUser fUser){
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
if(account != null){
String personName = account.getDisplayName();
String personEmail = account.getEmail();

if (personEmail != null) {
if(personEmail.endsWith("gmail.com"))
{
//Show details
}
else
{
mGoogleSignInClient.signOut();
Toast.makeText(MainActivity.this,"Login with gmail account only",Toast.LENGTH_SHORT).show();
//Show sign in button again
}
}
}
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
//Connection failed
}
}

最佳答案

您的 mAuth 为空,因为它是在您使用它进行处理后定义的。

mAuth = FirebaseAuth.getInstance(); 行应该在该条件之前。

按如下操作:

    mAuth = FirebaseAuth.getInstance();

if(mAuth.getCurrentUser() != null) {
silentLogin();
}

它肯定会起作用。

编辑:

我在我的项目中做了什么:

 final GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(MyActivity.this);

if (account != null) {
gotoNextActivity();
} else {
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signIn();
}
});
}

关于java - 通过在没有 SharedPreferences 的情况下使用 Google 登录自动登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59526016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com