节点 js JWT 获取当前用户



我使用Node JS,JWT和Sequelize为API进行身份验证的应用程序,并且我在前面使用React JS/redux。我已经成功实现了应用程序的登录/注销/注册部分,但现在我需要访问登录current_user。

我在 localStorage 中放置了一个 JWT,但我想访问用户 ID、用户电子邮件、用户名以及有关当前登录用户的更多信息。

我应该使用饼干吗?本地存储 ?还是我应该在我的 API 中创建一个当前用户方法?

我对此有点迷茫,如果有人可以帮助我找到一些有用的资源或建议!

谢谢!

如果将该信息放在 JWT 的有效负载中,则可以在不在服务器上解码或需要机密的情况下获取它,因此可以将令牌放入 LocalStorage 中以供随时使用。 根据规范,JWT 是<headerINfo>.<payloadInfo>.<signature> . 因此,在客户端上,您可以执行以下操作:

// given a payload object of { username: 'bob', userid: 1, email: 'bob@example.com' }
const tokenParts = token.split('.');
const encodedPayload = tokenParts[1];
const rawPayload = atob(encodedPayload);
const user = JSON.parse(rawPayload);
console.log(user.username); // outputs 'bob'

显然,此信息可供任何有权访问令牌的客户端使用,因此您只想将内容放入有效负载中。

令牌存储在 LocalStorage 中是可以的。如果您需要获取用户详细信息,请在 API 中创建终端节点,例如 getUser 。然后,您可以使用jwt.decode(accessToken, JWT SECRET HERE)并返回解码的值(这将是您的用户(,假设访问令牌有效。

如果你

还没有做一个中间件,你可以做一个中间件,这将确保用户信息始终可用于那些需要它的路由:

const auth = jwt({
    secret: JWT_SECRET,
    userProperty: 'payload',
    algorithms: ['HS256']
});
module.exports = auth;

然后你应该有带有用户详细信息的 req.payload。或者,可以根据设置应用的方式检查标头中的授权属性。

登录时,服务器应发送令牌和用户数据,您可以将该数据存储在 Redux 存储中。然后只需从那里请求数据。当用户重新加载页面时,使用JWT令牌发送API请求,服务器应返回用户数据,您将再次将其放入Redux存储中。

最新更新