首页 > 解决方案 > 如何在谷歌登录中更改电子邮件

问题描述

signInButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
        startActivityForResult(intent, SIGN_IN_CODE);
    }
});

登录时每个人都一样,但是如何从应用程序更改现有用户的电子邮件?

public class AccountSettings extends Fragment {

View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    rootView = inflater.inflate(R.layout.settings_account, container, false);

    Button mButton = (Button) rootView.findViewById(R.id.change);

    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            String mEmail = user.getEmail();

            user.updateEmail(mEmail)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                Log.d("TAAAAGGGG", "User email address updated.");
                            }
                        }
                    });
        }
    });

 return rootView;
}

}

..................................................... ..................................................... …………

标签: javaandroidfirebasegoogle-signin

解决方案


您需要重新验证您的用户。根据文档,更改主电子邮件地址是一项敏感操作。

对于重新验证,您可以使用这样的代码,result变量GoogleSignInResult在成功登录时具有。

GoogleSignInAccount acct = result.getSignInAccount();

// credential
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            Log.d(TAG, "User re-authenticated.");

                            //Now change your email address

                            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                            user.updateEmail("user@example.com")
                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()) {
                                                Log.d(TAG, "User email address updated.");
                                            }
                                        }
                                    });

                        }
                    });

推荐阅读