如何在客户端读取Passport.js用户信息?

时间:2016-08-09 16:40:12

标签: express angular oauth passport.js

我的应用程序使用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个部分。

1 个答案:

答案 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 });
);