基于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
相关产品推荐
相关产品推荐

