我有一个,它通过使用Firebase的电话OTP成功地登录了一个用户。登录后,将返回以下数据:
{"additionalUserInfo":{"isNewUser":false,“isNewUser”:null,"providerId":"phone","username":null},"user":{"displayName":null,"email":null,"emailVerified":false,"isAnonymous":false,"phoneNumber":"+123456644","photoURL":null,"providerData":数组,"providerId":“防火墙”,"refreshToken":refreshToken "tenantId":null,"uid":"Tx90EgWkSCf6M23KjsfH5Cf5vIv1"}}
从上面的数据可以看出,uid是Tx90EgWkSCf6M23KjsfH5Cf5vIv1。
为了测试Firebase的verifyIdToken函数,然后使用上面的uid并将其传递给以下方法:
admin
.auth()
.verifyIdToken('Tx90EgWkSCf6M23KjsfH5Cf5vIv1')
.then((decodedToken) => {
console.log('decodedToken', decodedToken)
})
.catch((error) => {
//Handle error
console.log('error', error)
})然后,我得到以下错误:
errorInfo: {
code: 'auth/argument-error',
message: 'Decoding Firebase ID token failed. Make sure you passed the entire string JWT which represents an ID token. See https://firebase.google.com/docs/auth/admin/verify-id-tokens for details on how to retrieve an ID token.'
},
codePrefix: 'auth'
}怎么解决这个问题?
发布于 2021-11-03 11:46:17
verifyIdToken()将用户的ID令牌作为参数,而不是UID。在DecodedIdToken对象中获取用户的UID。要在您的中获取用户的ID令牌,请尝试如下:
const token = await firebase.auth().currentUser.getIdToken();然后将此令牌传递给后端并进行验证。您不能通过UID检查用户标识。始终验证ID令牌。
从文档,
如果您的Firebase客户端应用程序与自定义后端服务器通信,您可能需要识别该服务器上当前登录的用户。要安全地这样做,成功登录后,使用HTTPS将用户的ID令牌发送到服务器。然后,在服务器上,验证ID令牌的完整性和真实性,并从其中检索uid。您可以使用以这种方式传输的uid来安全地标识服务器上当前已登录的用户。
您可以阅读更多关于基于令牌的身份验证这里的信息。
https://stackoverflow.com/questions/69824233
复制相似问题