📌  相关文章
📜  Firebase Google登录身份验证(1)

📅  最后修改于: 2023-12-03 14:41:12.194000             🧑  作者: Mango

Firebase 中的 Google 登录身份验证

Firebase 是由 Google 开发的后端服务平台,其提供了一系列的工具和服务,包括云存储、身份验证、实时数据库、云函数等。其中身份验证服务允许您实现多种身份验证方式,其中包括 Google 登录身份验证。本文将向您介绍如何在 Firebase 中实现 Google 登录身份验证。

准备工作

在开始之前,您需要完成以下几个任务:

  1. 在 Firebase 控制台中创建一个项目。
  2. 在 Google API 控制台中启用 Google 登录 API。
  3. 在 Firebase 控制台中启用 Google 登录身份验证。
实现步骤
1. 添加 Firebase 配置文件

在您的项目中,将 Firebase 配置文件添加到您的应用程序中。您可以在 Firebase 控制台中获取该文件。

2. 集成 Google 登录 API

使用 Firebase SDK 集成 Google 登录 API。这将使您的应用程序能够获取 Google 身份验证令牌。

// Swift 示例
import Firebase
import GoogleSignIn

// 初始化 Firebase
FirebaseApp.configure()

// 初始化 Google 登录
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
// Java 示例
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;

// 初始化 Firebase
FirebaseAuth mAuth = FirebaseAuth.getInstance();

// 初始化 Google 登录
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build();

GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
3. 实现 Google 登录

在您的应用程序中,提供 Google 登录选项以验证用户身份。当用户选择 Google 登录选项时,将启动 Google 登录流程,该流程将使用 Firebase SDK 获取并验证 Google 身份验证令牌。

// Swift 示例
@IBAction func signInWithGoogle(_ sender: Any) {
    GIDSignIn.sharedInstance()?.presentingViewController = self
    GIDSignIn.sharedInstance()?.signIn()
}

// Google 登录回调
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) {
    if let error = error {
        print("Google 登录出错: \(error.localizedDescription)")
        return
    }

    guard let authentication = user.authentication else { return }
    let credential = GoogleAuthProvider.credential(withIDToken: authentication.idToken, accessToken: authentication.accessToken)

    // 将令牌传递给 Firebase 身份验证以进行身份验证
    Auth.auth().signIn(with: credential) { (authResult, error) in
        if let error = error {
            print("Firebase 登录出错: \(error.localizedDescription)")
            return
        }
        // 用户已登录,执行下一步操作
    }
}
// Java 示例
private static int RC_SIGN_IN = 9001;

@RequiresApi(api = Build.VERSION_CODES.DONUT)
@OnClick(R.id.btn_google_signin)
public void signIn() {
    Intent signInIntent = mGoogleSignInClient.getSignInIntent();
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

// Google 登录回调
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // 结果由 Google 登录 SDK 处理
    if (requestCode == RC_SIGN_IN) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // Google 登录成功,将身份验证令牌传递给 Firebase 认证进行认证
            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            // Google 登录失败,处理错误
            Log.w(TAG, "Google 登录出错", e);
        }
    }
}

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // 用户已登录,执行下一步操作
                    } else {
                        // Firebase 登录失败,处理错误
                        Log.w(TAG, "Firebase 登录失败", task.getException());
                    }
                }
            });
}
4. 处理身份验证状态

当用户成功登录时,您可以使用 Firebase 身份验证 SDK 获取当前用户的身份验证状态。此时,您可以向用户显示特定于应用程序的内容,例如授权功能或访问权限。

// Swift 示例
if let user = Auth.auth().currentUser {
    // 用户已登录,执行下一步操作
} else {
    // 将用户指向登录视图控制器
}
// Java 示例
FirebaseUser user = mAuth.getCurrentUser();

if (user != null) {
    // 用户已登录,执行下一步操作
} else {
    // 将用户指向登录页面
}
结论

现在您已经学会了使用 Firebase 中的 Google 登录身份验证!在您的应用程序中集成 Google 登录时,请确保您理解身份验证流程并按照最佳实践进行操作。如果您还没有使用 Firebase,那么现在就去尝试吧!