Подтвердить что ты не робот

Как повторно аутентифицировать пользователя на Firebase с помощью Google Provider?

Пример для использования reauthenticate() в Firebase показывает только, как повторно аутентифицировать пользователя, который подписал с Email и пароль

AuthCredential credential = EmailAuthProvider.getCredential("[email protected]", "password1234");
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential);

Я также знаю, как повторно аутентифицироваться с помощью Facebook Provider (credential = FacebookAuthProvider.getCredential(AccessToken.getCurrentAccessToken().toString())).

Проблема в том, что в Google API нет эквивалентного метода, чтобы получить текущий токен доступа и, в конечном итоге, получить AuthCredential. Итак, что я передаю в getCredential() в этом случае?

4b9b3361

Ответ 1

Учитывая, что вы получили бы GoogleSignInResult как ответ на вход, я думаю, вы можете использовать следующий код:

// assuming result variable has GoogleSignInResult
// GoogleSignInResult result 

// Get the account
GoogleSignInAccount acct = result.getSignInAccount();

// credential
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {...

Ответ 2

Вы можете получить GoogleSignInResult через 2 способа аутентификации.

i) Введя идентификатор электронной почты и пароль в экран входа в google.

ii) Выбирая учетную запись из уже зарегистрированной учетной записи в телефоне.

Я использовал 2-й подход для доступа к токену и аутентификации пользователя.

для получения дополнительных ссылок ссылок ссылок ниже.

google вход в ссылку 1

fooobar.com/info/314401/...

документация поставщика google auth

документы проверки подлинности на стороне сервера

если ваша единственная цель - получить токен, чтобы вы могли попробовать этот источник github.

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestEmail()
    .build();

//использовать параметр входа для создания api-клиента.

mGoogleApiClient = new GoogleApiClient.Builder(this)
    .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
    .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
    .build();
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent,RC_SIGN_IN); }

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Result returned from launching the Intent from    GoogleSignInApi.getSignInIntent(...);
if (requestCode == RC_SIGN_IN){
    GoogleSignInResult result =Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    handleSignInResult(result);
    }


private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
    // Signed in successfully, show authenticated UI.
    GoogleSignInAccount acct = result.getSignInAccount();


} else {
    // Signed out, show unauthenticated.

       }
}

//получить аутентификацию

AuthCredential credential =
GoogleAuthProvider.getCredential(acct.getIdToken(), null);
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
// add your job here on authenticated
} 
// if token is obsoleted then you can do this
credential.refreshToken();
accessToken = credential.getAccessToken();