我在app上使用Node JS,JWT和Sequelize for the API进行身份验证,我使用React JS / redux作为前面的部分。我已经成功地实现了应用程序的登录/注销/注册部分,但是现在我需要访问登录的current_user。
我在localStorage中放置了一个JWT,但我希望能够访问用户ID、用户电子邮件、用户名和有关当前登录的用户的更多信息。
我应该使用Cookie吗?LocalStorage?或者我应该在我的应用程序接口中创建一个currentUser方法?
如果有人能帮我找到一些有用的资源或建议,我对此有点迷惑!
谢谢!
发布于 2017-11-12 01:10:24
将令牌存储在LocalStorage中就可以了。如果您需要获取用户详细信息,请在您的API中创建一个端点,例如getUser。然后,您可以使用jwt.decode(accessToken, JWT SECRET HERE)并返回解码值(这将是您的用户),前提是accessToken是有效的。
发布于 2017-11-12 01:20:23
如果将该信息放入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'显然,这些信息对任何有权访问令牌的客户端都是可用的,所以您只需要在有效负载中放入可以访问的内容即可。
发布于 2021-01-31 15:10:15
你可以制作一个中间件,如果你还没有这样做的话,它将确保用户信息总是对那些需要它的路由可用:
const auth = jwt({
secret: JWT_SECRET,
userProperty: 'payload',
algorithms: ['HS256']
});
module.exports = auth;然后,您应该拥有包含用户详细信息的req.payload。或者,您可以检查标头中的Authorization属性,这取决于您如何设置您的应用程序。
https://stackoverflow.com/questions/47240564
复制相似问题