Firebase:如何使用相同的自定义令牌从不同的环境(JS和iOS)进行身份验证


Firebase: How can I use the same custom token for authentication from different environments (JS and iOS)?

我正在尝试使用相同的令牌(服务器端生成-PHP)在web(JS)和iOS应用程序(SDK)中对用户进行身份验证。以下是我对用户进行身份验证的步骤:

  1. 生成JWT令牌:

我正在使用推荐的libhttps://github.com/firebase/firebase-token-generator-php:

$generator = new TokenGenerator($firebaseSecret);
$token = $generator->setOption('expires', strtotime('+1 day'))
    ->setData(array('uid' => $user->id))
    ->create();
  1. 使用令牌通过Javascript对用户进行身份验证:

    ref.authWithCustomToken(token, registerHandler);
    registerHandler: function(error, authData)
    {
        if (error) {
            console.log("Login Failed!", error);
        } else {
            console.log("Login Success!");
    }
    

一切正常,第一次,用户登录并准备好滚动。(Firebase会话设置为1年)

但是:

  1. 如果我注销并使用相同的方法使用相同的令牌再次登录,我会收到以下错误:"INVALID_token:无法验证MAC。"。如果我使用另一个新令牌,一切都会再次工作
  2. 如果我将令牌(未使用)发送到我正在使用的iOS应用程序,我会一直收到上述错误

有人能透露一下这种情况吗?任何帮助都将不胜感激。

最终我自己发现了这个问题。我将在这里发布这篇文章,以便将来的开发人员避免我遇到的问题。

请始终小心数据的存储位置。我的令牌存储在DB中的varchar类型列中,但它们大于256个字符,因此没有正确保存。更改列类型后,一切都完美无瑕。