Firebase 如何获取JWT并将其传递给服务器?

Firebase 如何获取JWT并将其传递给服务器?,firebase,firebase-authentication,react-native-firebase,Firebase,Firebase Authentication,React Native Firebase,我使用的是React Native Firebase Auth,但是我的用户配置文件实际上存储在关系数据库中。正因为如此,我已经映射了Firebase uid=>PostgreSQL整数id(考虑将uid用于一切以保持简单,而不是映射到我自己数据库中的id) 无论如何,当我的React本机应用程序启动时,我的用户通过Firebase登录,我会收到一个回复,回复信息包括uid,refresh\u token,等等 我应该如何获取此用户的令牌并将其传递到我的后端Node.js服务器以获取其配置文件?

我使用的是React Native Firebase Auth,但是我的用户配置文件实际上存储在关系数据库中。正因为如此,我已经映射了Firebase uid=>PostgreSQL整数id(考虑将uid用于一切以保持简单,而不是映射到我自己数据库中的id)

无论如何,当我的React本机应用程序启动时,我的用户通过Firebase登录,我会收到一个回复,回复信息包括
uid
refresh\u token
,等等

我应该如何获取此用户的令牌并将其传递到我的后端Node.js服务器以获取其配置文件?似乎只有来自auth响应的
refresh\u令牌
,我不应该通过

目前,我只是将Firebase Auth提供的
uid
Firebase Auth传递给我的后端服务器,假设这“足够安全”,因为他们是通过登录获得的。这是否足够?我觉得我应该传递一些令牌->在服务器上解码->获取uid


如果是,如何执行此操作?

您可以使用
getIdToken()
检索当前登录的用户JWT。例如,在您的客户机上:

if (firebase.auth().currentUser) {
  const token = await firebase.auth().currentUser.getIdToken();
  // do something with token - e.g. send as a header with your api requests
}
然后,通过admin sdk在后端代码上检索令牌头并验证令牌和用户是否存在,例如,对于节点admin sdk,用于此目的的ExpressJS中间件可能类似于:

module.exports=异步函数(req、res、next){
const{token}=req.headers;
如果(!token | |!token.length)返回next();
//验证JWT并提取用户id
const{uid}=await firebase.auth().verifyIdToken(token);
//根据id查找用户
const user=await firebase.auth().getUser(uid);
如果(用户){
//在此请求上保留用户类的实例
请求用户=用户;
//用于请求调试的用户的原始可序列化版本?
req.user=user.toJSON();
}
//如果(!user)res.send('未经授权'),则TODO;
返回next();

};
您可以使用
getIdToken()
检索当前登录的用户JWT。例如,在您的客户机上:

if (firebase.auth().currentUser) {
  const token = await firebase.auth().currentUser.getIdToken();
  // do something with token - e.g. send as a header with your api requests
}
然后,通过admin sdk在后端代码上检索令牌头并验证令牌和用户是否存在,例如,对于节点admin sdk,用于此目的的ExpressJS中间件可能类似于:

module.exports=异步函数(req、res、next){
const{token}=req.headers;
如果(!token | |!token.length)返回next();
//验证JWT并提取用户id
const{uid}=await firebase.auth().verifyIdToken(token);
//根据id查找用户
const user=await firebase.auth().getUser(uid);
如果(用户){
//在此请求上保留用户类的实例
请求用户=用户;
//用于请求调试的用户的原始可序列化版本?
req.user=user.toJSON();
}
//如果(!user)res.send('未经授权'),则TODO;
返回next();

};firebase.auth().signandRetrieveDatawithEmailandPassword()
会带着我需要的令牌返回,但我发现我需要调用一个单独的方法。哇,非常感谢!我想
firebase.auth().signandRetrieveDatawithEmailandPassword()
会带着我需要的令牌返回,但我发现我需要调用一个单独的方法。