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

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

开始前的准备工作

  1. 将 Firebase 添加到您的 Android 项目中
  2. 如果您尚未将自己的应用关联到您的 Firebase 项目,请在 Firebase 控制台中进行关联。
  3. 将 Firebase 身份验证的依赖项添加到您的应用级 build.gradle 文件中:
    compile 'com.google.firebase:firebase-auth:11.6.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();

发送以下问题的反馈:

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