如何获取 JWT 并将其传递到服务器?
How to get and pass the JWT through to server?
我正在使用 React Native Firebase Auth,但我的用户配置文件实际上存储在我的关系数据库中。因此,我映射了 Firebase uid => PostgreSQL 整数 id。 (考虑只对所有内容使用 uid 以保持简单,而不是映射到我自己的数据库中的 id)?
无论如何,当我的 React Native 应用程序启动时,我的用户是通过 Firebase 登录的,我会收到回复,其中包含 uid
、refresh_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
我正在使用 React Native Firebase Auth,但我的用户配置文件实际上存储在我的关系数据库中。因此,我映射了 Firebase uid => PostgreSQL 整数 id。 (考虑只对所有内容使用 uid 以保持简单,而不是映射到我自己的数据库中的 id)?
无论如何,当我的 React Native 应用程序启动时,我的用户是通过 Firebase 登录的,我会收到回复,其中包含 uid
、refresh_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