【问题标题】:How do I read Passport.js user info on client side?如何在客户端读取 Passport.js 用户信息?
【发布时间】:2016-08-09 16:40:12
【问题描述】:

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

【问题讨论】:

    标签: express angular oauth passport.js


    【解决方案1】:

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

    您当然可以将用户数据添加到每个请求的响应中,但如果您真的使用基于 cookie 的会话,则在每个响应中发送用户对象可能没有什么意义。你可以例如。只需添加一条返回req.user相关部分的路由:

    app.get('/users', function(req, res) {
      res.json({ username : req.user.username });
    );
    

    【讨论】:

    • 我想我现在明白了。 Express 将客户端上的唯一 ID(会话)设置为 cookie。当客户端随请求一起发送凭据时,会发送该 cookie 的字符串,然后将其用户详细信息添加到服务器上的 req 对象中,我可以在其中使用它们。在任何时候,用户详细信息实际上都不会从服务器传输回客户端。所以我完全误解了它最初是如何工作的。我需要去检查如何使用 JWT 实现 Passport.js。谢谢,正是我需要的!
    猜你喜欢
    • 1970-01-01
    • 2013-04-03
    • 2015-09-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多