You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Jetpack Compose的Firebase GitHub认证实现疑问

实现Firebase GitHub认证(Kotlin版本)

1. 初始化Auth实例与GitHub认证Provider

先在Activity/Fragment中完成基础初始化:

private lateinit var firebaseAuth: FirebaseAuth

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    firebaseAuth = FirebaseAuth.getInstance()
}

// 构建GitHub认证Provider,可自定义请求权限
private fun buildGitHubProvider(): OAuthProvider {
    return OAuthProvider.newBuilder("github.com")
        .addCustomParameter("scope", "user:email") // 可选:请求读取用户邮箱权限
        .build()
}

2. 绑定图标点击事件,启动授权跳转

给GitHub图标按钮设置点击监听,触发GitHub授权页面跳转:

// 假设githubLoginIcon是你的GitHub图标按钮
githubLoginIcon.setOnClickListener {
    val pendingAuthTask = firebaseAuth.pendingAuthResult
    if (pendingAuthTask != null) {
        // 处理未完成的残留认证流程
        pendingAuthTask
            .addOnSuccessListener { authResult ->
                handleAuthSuccess(authResult)
            }
            .addOnFailureListener { e ->
                Toast.makeText(this, "认证失败:${e.message}", Toast.LENGTH_SHORT).show()
            }
    } else {
        // 启动全新的GitHub认证流程,自动跳转至GitHub授权页
        firebaseAuth.startActivityForSignInWithProvider(this, buildGitHubProvider())
            .addOnSuccessListener { authResult ->
                handleAuthSuccess(authResult)
            }
            .addOnFailureListener { e ->
                Toast.makeText(this, "认证失败:${e.message}", Toast.LENGTH_SHORT).show()
            }
    }
}

3. 处理认证成功后的逻辑

编写函数处理登录成功后的操作,比如获取用户信息、跳转主页:

private fun handleAuthSuccess(authResult: AuthResult) {
    val user = authResult.user
    // 获取GitHub用户公开信息
    val githubProfile = authResult.additionalUserInfo?.profile
    val userName = githubProfile?.get("login") as? String
    val userAvatarUrl = githubProfile?.get("avatar_url") as? String
    
    // 获取GitHub OAuth访问令牌(如需调用GitHub API可使用)
    val credential = authResult.credential as OAuthCredential
    val accessToken = credential.accessToken
    
    // 示例操作:提示登录成功并跳转主页
    Toast.makeText(this, "欢迎,$userName!", Toast.LENGTH_SHORT).show()
    // startActivity(Intent(this, MainActivity::class.java))
    // finish()
}

4. 已登录用户关联GitHub账号(可选)

如果需要给当前已登录用户绑定GitHub账号,替换上述登录代码为:

val currentUser = firebaseAuth.currentUser
currentUser?.startActivityForLinkWithProvider(this, buildGitHubProvider())
    ?.addOnSuccessListener {
        Toast.makeText(this, "GitHub账号关联成功", Toast.LENGTH_SHORT).show()
    }
    ?.addOnFailureListener { e ->
        Toast.makeText(this, "关联失败:${e.message}", Toast.LENGTH_SHORT).show()
    }

注意事项:

  • 确保Firebase控制台已正确配置GitHub的Client ID、Client Secret,且GitHub OAuth应用的回调URL与Firebase提供的一致
  • 无需额外配置跳转逻辑,startActivityForSignInWithProvider会自动拉起GitHub授权页面

内容的提问来源于stack exchange,提问作者user20197752

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:05:18