我的应用程序使用Angular2作为前端,由运行express的单独(跨域)后端服务器提供服务,并使用passport.js进行Google Oauth身份验证。
当服务器使用Passport(通过google oauth)对用户进行身份验证时,他们的用户数据将从数据库加载并包含在凭据中,凭据用于确定他们有权使用哪些后端API路由。 (这是基于scotch.io的这个教程,我确信每个人都看过:https://scotch.io/tutorials/easy-node-authentication-setup-and-local)
我想在我的前端访问此用户对象,以启用依赖于用户访问级别(在服务器上的用户对象中定义)的路由保护。
从这个问题看来,数据似乎是通过JWT发送的,并且在前端是可读的,只是不可更改,这很好:https://www.reddit.com/r/Angular2/comments/4ud0ac/ng2_secure_connection_front_to_back/
如何在客户端上访问和读取该令牌?我只能找到由express设置的'connect.sid'会话cookie。 cookie的有效负载不符合标准JWT,因为它只有2个部分,而不是3个部分。
答案 0 :(得分:0)
如果您遵循本教程,您可能不会使用JWT,而是使用基于cookie的会话。 cookie只包含一个会话ID,服务器使用该会话ID来识别会话存储中的会话,使用此信息,您可能会在deserializeUser
中从数据库中挖掘出一些内容。然后,您可以在后端req.user
中使用它。
您当然可以将用户数据添加到每个请求的响应中,但如果您确实使用基于cookie的会话,那么发送用户对象的每个响应可能都没有意义。你可以,例如。只需添加一条返回req.user
的相关部分的路线:
app.get('/users', function(req, res) {
res.json({ username : req.user.username });
);