Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 如何读取客户端的Passport.js用户信息?_Express_Angular_Oauth_Passport.js - Fatal编程技术网

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

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上的本教程,我相信每个人都看过:) 我想在我的前端访问这个用户对象,以启用依赖于用户访问级别(在服务器上的用户对象中定义)的路由保护 从这个问题

我的应用程序使用Angular2作为前端,由运行express的独立(跨域)后端服务器提供服务,并使用passport.js进行Google Oauth身份验证

当服务器使用Passport(通过google oauth)对用户进行身份验证时,将从数据库加载用户数据并将其包含在凭据中,凭据用于确定授权用户使用哪些后端API路由。(它基于scotch.io上的本教程,我相信每个人都看过:)

我想在我的前端访问这个用户对象,以启用依赖于用户访问级别(在服务器上的用户对象中定义)的路由保护

从这个问题来看,数据似乎是通过JWT发送的,在前端是可读的,只是不可更改,这很好:


如何在客户端上访问和读取该令牌?我只能找到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。谢谢,这正是我需要的!