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

How do I read Passport.js user info on client side?

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

如果您按照本教程进行操作,则可能没有使用 JWT,而是使用基于 cookie 的会话。 cookie 仅包含一个会话 ID,您的服务器使用该会话 ID 从会话存储中识别会话,并且使用此信息您可能会从 deserializeUser 的数据库中挖掘出一些东西。然后您可以在后端的 req.user 中使用它。

您当然可以将用户数据添加到每个请求的响应中,但如果您真的使用基于 cookie 的会话,则在每个响应中发送用户对象可能意义不大。你可以例如。只需添加一条路线 return req.user:

的相关部分
app.get('/users', function(req, res) {
  res.json({ username : req.user.username });
);