如何正确验证Firebase Authentication的Token并解决verifyIdToken参数错误
错误根因
verifyIdToken 方法要求传入的参数是JWT格式的Firebase ID令牌,你错误传入了用户UID,二者是完全不同的两类凭证,因此触发解析失败报错。
修复步骤
- 第一步:在React Native前端登录成功后,调用user对象的
getIdToken()方法获取正确的ID令牌
示例代码:
// 手机号OTP登录成功回调中获取ID令牌 const userCredential = await signInWithPhoneNumber(auth, confirmationResult, 你输入的OTP验证码); const idToken = await userCredential.user.getIdToken(); // 后续将该idToken传给后端服务进行校验,不要传递UID
- 第二步:后端拿到前端传递的idToken后,再调用
verifyIdToken方法完成校验
示例代码:
admin .auth() .verifyIdToken(idToken) // 这里传入前端返回的JWT格式ID令牌,不是UID .then((decodedToken) => { // 校验成功后可从decodedToken中获取用户uid、手机号等可信信息 const uid = decodedToken.uid; console.log('decodedToken', decodedToken) }) .catch((error) => { console.log('error', error) })
补充说明
如果仅做本地方法测试,直接复制前端获取到的完整idToken字符串作为参数即可,不要使用UID进行测试。
内容的提问来源于stack exchange,提问作者preston
相关产品推荐
相关产品推荐

