Express 如何读取客户端的Passport.js用户信息?
我的应用程序使用Angular2作为前端,由运行express的独立(跨域)后端服务器提供服务,并使用passport.js进行Google Oauth身份验证 当服务器使用Passport(通过google oauth)对用户进行身份验证时,将从数据库加载用户数据并将其包含在凭据中,凭据用于确定授权用户使用哪些后端API路由。(它基于scotch.io上的本教程,我相信每个人都看过:) 我想在我的前端访问这个用户对象,以启用依赖于用户访问级别(在服务器上的用户对象中定义)的路由保护 从这个问题来看,数据似乎是通过JWT发送的,在前端是可读的,只是不可更改,这很好:Express 如何读取客户端的Passport.js用户信息?,express,angular,oauth,passport.js,Express,Angular,Oauth,Passport.js,我的应用程序使用Angular2作为前端,由运行express的独立(跨域)后端服务器提供服务,并使用passport.js进行Google Oauth身份验证 当服务器使用Passport(通过google oauth)对用户进行身份验证时,将从数据库加载用户数据并将其包含在凭据中,凭据用于确定授权用户使用哪些后端API路由。(它基于scotch.io上的本教程,我相信每个人都看过:) 我想在我的前端访问这个用户对象,以启用依赖于用户访问级别(在服务器上的用户对象中定义)的路由保护 从这个问题
如何在客户端上访问和读取该令牌?我只能找到express设置的“connect.sid”会话cookie。cookie的有效负载不适合标准JWT,因为它只有2个部分,而不是3个部分。如果您遵循本教程,则可能使用的不是JWT,而是基于cookie的会话。cookie仅包含一个会话ID,您的服务器使用该ID从会话存储中标识会话,使用此信息,您可能会在
反序列化用户
中从数据库中找到一些内容。然后,您可以在后端的req.user
中使用它
当然,您可以将用户数据添加到每个请求的响应中,但是如果您真的使用基于cookie的会话,则在每个响应中发送用户对象可能没有什么意义。例如,您可以添加一条路由,该路由将返回req.user
的相关部分:
app.get('/users', function(req, res) {
res.json({ username : req.user.username });
);
我想我现在明白了。Express正在将客户端上的唯一id(会话)设置为cookie。当客户端随请求一起发送凭据时,将发送cookie的字符串,然后将其用户详细信息添加到服务器上的req对象中,我可以在其中使用它们。用户详细信息实际上不会在任何时候从服务器传输回客户端。所以我完全误解了它最初的工作原理。我需要去检查如何用JWTs实现Passport.js。谢谢,这正是我需要的!