在 Android 上使用 GitHub 进行身份验证

您可以将 GitHub 身份验证集成到您的应用中,让您的用户可使用自己的 GitHub 帐号进行 Firebase 身份验证。

开始前的准备工作

  1. 将 Firebase 添加至您的 Android 项目
  2. 如果您尚未将您的应用与 Firebase 项目相关联,请在 Firebase 控制台中将其关联。
  3. 将 Firebase 身份验证的依赖项添加至您的应用级 build.gradle 文件:
    implementation 'com.google.firebase:firebase-auth:16.0.2'
  4. 在 GitHub 上将您的应用注册为开发者应用,并获取您的应用的 OAuth 2.0 客户端 ID客户端密钥
  5. 启用 GitHub 身份验证:
    1. Firebase 控制台中,打开 Authentication(身份验证)部分。
    2. 登录方法标签上,启用 GitHub 登录方法,并指定您之前从 GitHub 获得的 OAuth 2.0 客户端 ID客户端密钥
    3. 然后,请务必转到您的 GitHub 应用配置,在您的应用的设置页面中,将 Firebase OAuth 重定向 URI(例如 my-app-12345.firebaseapp.com/__/auth/handler)设为您的授权回调网址

进行 Firebase 身份验证

  1. 开发者文档中的说明操作,将 GitHub 身份验证集成到您的应用中。使用网络应用流程,并在您的应用中设置一个 Intent 过滤器,以处理来自 GitHub 的 OAuth 2.0 回调。 在 GitHub 登录流程结束后,您会收到一个 OAuth 2.0 访问令牌。
  2. 在登录 Activity 的 onCreate 方法中,获取 FirebaseAuth 对象的共享实例:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  3. 初始化您的 Activity 时,请检查用户当前是否已登录:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  4. 在用户使用 GitHub 成功登录后,用 OAuth 2.0 访问令牌换取一个 Firebase 凭据,然后使用此 Firebase 凭据进行 Firebase 身份验证:
    String token = "<GITHUB-ACCESS-TOKEN>";
    AuthCredential credential = GithubAuthProvider.getCredential(token);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
    
                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    if (!task.isSuccessful()) {
                        Log.w(TAG, "signInWithCredential", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
    
                    // ...
                }
            });
    
    如果对 signInWithCredential 的调用成功,您可以使用 getCurrentUser 方法获取用户的帐号数据。

后续步骤

在用户首次登录后,系统会创建一个新的用户帐号,并将其与该用户登录时使用的凭据(即用户名和密码、电话号码或者身份验证提供方信息)相关联。此新帐号存储在您的 Firebase 项目中,无论用户采用何种方式登录,您项目中的每个应用都可以使用此帐号来识别用户。

  • 在您的应用中,您可以从 FirebaseUser 对象获取用户的个人资料基本信息。请参阅管理用户

  • 在您的 Firebase 实时数据库和 Cloud Storage 安全规则中,您可以从 auth 变量获取已登录用户的唯一身份用户 ID,然后用此 ID 来控制用户可以访问哪些数据。

您可以通过将身份验证提供方凭据关联至现有用户帐号,让用户可以使用多个身份验证提供方服务登录您的应用。

要让用户退出帐号,可调用 signOut

FirebaseAuth.getInstance().signOut();

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面