代码之家  ›  专栏  ›  技术社区  ›  konstantin_doncov

使用Firebase验证用户手机号码的正确方法

  •  5
  • konstantin_doncov  · 技术社区  · 7 年前

    Firebase's 电话验证开启 Android iOS

    所以,我决定在服务器端发送手机号码并在那里进行检查:发送验证码并向用户询问此验证码。但是我看不到任何C++服务器 Firebase SDK ,只有客户端C++SDK可用。

    • 了解如何在服务器端信任客户端验证(注意,我可以有不受信任的客户端)?所以,这意味着我可以使用主Firebase电话号码验证方法。
    • 使用服务器端电话验证。

    1 回复  |  直到 7 年前
        1
  •  9
  •   Ian Barber    7 年前

    客户端在这里绝对有效。流程如下:

    1. Firebase电话验证服务器向该号码发送代码
    2. 用户将代码输入应用程序,应用程序将其发送到Firebase Auth服务器
    3. Firebase Auth server返回Firebase Auth令牌

    这是因为恶意用户只有在拥有你的手机时才能知道代码。它不能保证该设备是带有该电话号码的设备(用户可以有两部手机,或者用笔记本电脑上的手机登录),但它确实验证了用户可以访问该号码。

    为了将其验证到您自己的后端,您需要检索Firebase ID令牌。这只是base64编码的JSON的一小部分,但重要的是它是由Firebase进行加密签名的。这意味着您可以在服务器上验证它是否确实是由Firebase为其中包含的用户和电话号码创建的。如果没有访问基础帐户的权限,用户无法生成其中一个令牌。

    查看上的文档 verifying ID tokens

    检索Firebase ID令牌

    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
       mUser.getToken(true)
        .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
            public void onComplete(@NonNull Task<GetTokenResult> task) {
                if (task.isSuccessful()) {
                    String idToken = task.getResult().getToken();
                    // Send token to your backend via HTTPS
                    // ...
                } else {
                    // Handle error -> task.getException();
                }
            }
        });
    

    在服务器上验证ID令牌的内容。

    管理SDK是现成设置的,用于检查ID令牌的正确证书、访问群体、到期日和其他重要属性。

    admin.auth().verifyIdToken(idToken)
      .then(function(decodedToken) {
        var uid = decodedToken.uid;
        // ...
      }).catch(function(error) {
        // Handle error
      });
    

    decodedToken 也将包含电话号码的属性!