我正在使用 React Native 和 NodeJS 创建应用程序。我已经有了我的身份验证系统。现在我尝试实现 Google Sign In。所以:
我在 Postman 上测试时遇到此错误:
消息:“Firebase ID 令牌的“aud”(受众)声明不正确。 期待“tak-muscu”,但得到了 “XXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com”。 确保 ID 令牌来自与该 ID 令牌相同的 Firebase 项目 用于验证此 SDK 的服务帐户。看 https://firebase.google.com/docs/auth/admin/verify-id-tokens 用于 有关如何检索 ID 令牌的详细信息。”
我从我的客户那里获得了令牌:
GoogleSignin.configure({
webClientId: 'XXXXX-ruib6t1s7lochabens3f3ep67pa411nc.apps.googleusercontent.com',
androidClientId: 'XXXXX-fvv7nndd0q53hvoht9cldt82jm5a9306.apps.googleusercontent.com',
scopes: ['profile', 'email']
});
const signIn = async () => {
try {
await GoogleSignin.hasPlayServices();
const userInfo = await GoogleSignin.signIn();
const idToken = userInfo.idToken;
console.log('ID Token:', idToken);
} catch (error) {
console.error('Google Sign-In error', error.message);
}
};
我用Postman把它传给路线:
router.post('/google-signin', async (req, res) => {
const { idToken } = req.body;
const result = await verifyGoogleToken(idToken);
if (result.status === 'success') {
res.send({ message: 'Authentication successful', user: result.decodedToken });
} else {
res.status(401).send({ message: 'Authentication failed', error: result.message });
}
});
函数 verifyGoogleToken :
const admin = require('firebase-admin');
const verifyGoogleToken = async (idToken) => {
try {
const decodedToken = await firebase.auth().verifyIdToken(idToken);
console.log("Token validé avec succès", decodedToken);
return { status: 'success', uid: decodedToken.uid };
} catch (error) {
console.error('Erreur lors de la vérification du token', error);
return { status: 'error', message: error.message };
}
};
module.exports = { verifyGoogleToken };
App.js 服务器 :
const admin = require('firebase-admin');
const serviceAccount = require('./secrets/service-account-file.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
我尝试了 4 次...每次都遇到相同的错误
问题是我没有使用正确的令牌。我使用的是 google 登录令牌而不是 firebase 令牌。因此,当我在服务器中传递令牌时,我收到此错误。
所以,这是我找到的解决方案:
import auth from '@react-native-firebase/auth'; //import this
import { GoogleSignin } from '@react-native-google-signin/google-signin';
const { idToken } = await GoogleSignin.signIn(); // here you get Google Sign in token
const googleCredential = auth.GoogleAuthProvider.credential(idToken);
const userCredential = await auth().signInWithCredential(googleCredential); // use google sign in token for auth to Firebase
const firebaseIdToken = await userCredential.user.getIdToken(true);
console.log('Firebase ID Token:', firebaseIdToken); // Use this token for server.
然后您可以将 firebaseIdToken 传递到您的服务器