转到控制台

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

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

准备工作

  1. 将 Firebase 添加到您的 Android 项目(如果尚未添加)。
  2. 请务必在您的项目级 build.gradle 文件中的 buildscriptallprojects 部分添加 Google 的 Maven 代码库。
  3. 将 Android 版 Firebase 身份验证库的依赖项添加到您的模块(应用级)Gradle 文件(通常为 app/build.gradle):

    implementation 'com.google.firebase:firebase-auth:17.0.0'
    
  4. 在 GitHub 上将您的应用注册为开发者应用,并为其获取 OAuth 2.0 客户端 ID客户端密钥
  5. 启用 GitHub 身份验证:
    1. Firebase 控制台中,打开身份验证部分。
    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 对象的共享实例:

    Java
    Android

    private FirebaseAuth mAuth;// ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();

    Kotlin
    Android

    private lateinit var auth: FirebaseAuth// ...
    // Initialize Firebase Auth
    auth = FirebaseAuth.getInstance()
  3. 初始化您的 Activity 时,请检查用户当前是否已登录:

    Java
    Android

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }

    Kotlin
    Android

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }
  4. 在用户使用 GitHub 成功登录后,用 OAuth 2.0 访问令牌换取 Firebase 凭据,然后使用此 Firebase 凭据进行 Firebase 身份验证:

    Java
    Android

    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();
                    }
    
                    // ...
                }
            });

    Kotlin
    Android

    val token = "<GITHUB-ACCESS-TOKEN>"
    val credential = GithubAuthProvider.getCredential(token)
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this) { 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.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                }
    
                // ...
            }
    如果对 signInWithCredential 的调用成功,您可以使用 getCurrentUser 方法获取用户的帐号数据。

后续步骤

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

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

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

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

要让用户退出登录,请调用 signOut

Java
Android

FirebaseAuth.getInstance().signOut();

Kotlin
Android

FirebaseAuth.getInstance().signOut()