我正在尝试使用相同的令牌(服务器端生成-PHP)在web(JS)和iOS应用程序(SDK)中对用户进行身份验证。以下是我对用户进行身份验证的步骤:
- 生成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();
使用令牌通过Javascript对用户进行身份验证:
ref.authWithCustomToken(token, registerHandler); registerHandler: function(error, authData) { if (error) { console.log("Login Failed!", error); } else { console.log("Login Success!"); }
一切正常,第一次,用户登录并准备好滚动。(Firebase会话设置为1年)
但是:
- 如果我注销并使用相同的方法使用相同的令牌再次登录,我会收到以下错误:"INVALID_token:无法验证MAC。"。如果我使用另一个新令牌,一切都会再次工作
- 如果我将令牌(未使用)发送到我正在使用的iOS应用程序,我会一直收到上述错误
有人能透露一下这种情况吗?任何帮助都将不胜感激。
最终我自己发现了这个问题。我将在这里发布这篇文章,以便将来的开发人员避免我遇到的问题。
请始终小心数据的存储位置。我的令牌存储在DB中的varchar类型列中,但它们大于256个字符,因此没有正确保存。更改列类型后,一切都完美无瑕。