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

How to get and pass the JWT through to server?

我正在使用 React Native Firebase Auth,但我的用户配置文件实际上存储在我的关系数据库中。因此,我映射了 Firebase uid => PostgreSQL 整数 id。 (考虑只对所有内容使用 uid 以保持简单,而不是映射到我自己的数据库中的 id)?

无论如何,当我的 React Native 应用程序启动时,我的用户是通过 Firebase 登录的,我会收到回复,其中包含 uidrefresh_token 等信息

我应该如何获取此用户的令牌并将其传递到我的后端 Node.js 服务器以获取他们的个人资料?似乎只有 refresh_token 来自身份验证响应,我不应该通过。

目前,我只是将 uid Firebase Auth 传递给我的后端服务器,假设那是 "secure enough" 因为他们从登录中获得了它。这就足够了吗?我觉得我应该传递一些令牌 -> 在服务器上对其进行解码 -> 获取 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 在您的后端代码上检索令牌 header 并验证令牌和用户是否存在,例如对于 Node Admin SDK,ExpressJS 中间件可能类似于:

module.exports = async function (req, res, next) {
  const { token } = req.headers;

  if (!token || !token.length) return next();

  // validate JWT and pluck user id
  const { uid } = await firebase.auth().verifyIdToken(token);
  // find the user based on id
  const user = await firebase.auth().getUser(uid);

  if (user) {
    // keep an instance of the User class on this request
    req._user = user;
    // raw serializable version of the user for request debugging?
    req.user = user.toJSON();
  }
  
  // TODO if (!user) res.send('Unauthorised');

  return next();
};

供参考;此方法的 React Native Firebase 文档位于:https://rnfirebase.io/docs/v5.x.x/auth/reference/User#getIdToken