【问题标题】:passport object empty not getting called in passport/express app, not calling deserializeUser护照对象为空未在护照/快递应用程序中调用,未调用反序列化用户
【发布时间】:2014-11-30 08:36:41
【问题描述】:

我在不同的域上有一个 angularjs 应用程序调用基于 express 的 api 的请求。例如,我有一个应用程序在 localhost:9000 上运行并连接到 api@localhost:3000。 Express 是 3.51,护照:0.1.18,Angularjs:1.2

对于 express,我设置了 cors 并将允许凭据设置为 true:

app.use(function (req, res, next) {
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Origin', req.headers.origin);
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH');
  res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
  next();
});

我在路由器之前初始化护照:

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());*
app.use(app.router);

在我的 AnguarJS 前端中,我确实设置了默认值以在我的 http 请求中使用凭据:

$httpProvider.defaults.withCredentials = true; 

我错过了什么吗?登录后,我确实看到 serializeUser 被调用。在后续请求中,我看到 cookie 在标头中发送:

GET /api/shows?themes=true HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: http://localhost:9000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.122 Safari/537.36
Referer: http://localhost:9000/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: __distillery=OHFOIWEFOWEIJFO2352039832904BLAH; connect.sid=s%lweifjeill32ij3ri3KSLIJSEF.selfijseilfjsefeljkfe%2B%2BqUeXF0k
If-None-Match: "-2134790151"

但是由于 req.session 上的护照对象为空,因此永远不会调用 deserializeUser。我错过了什么吗?我在同一个域(localhost:3000)上也有一个登录页面,并且登录/密码工作正常。所以我认为它必须对跨域或标头设置做一些事情,但我不知道如何调试它。

更新 - 如果我将所有前端代码移动到 api 应用程序中(这样就不会发生跨域,身份验证和会话工作正常...

【问题讨论】:

    标签: angularjs node.js express passport.js


    【解决方案1】:

    原来所有设置都是正确的,但在初次登录时,我发送了一个包含用户名/密码和{withCredentials: false} 的帖子请求。这会创建一个新会话,但 cookie 正在引用现有会话。一旦我对此发表评论,我就可以让它工作。

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 2015-12-22
      • 2016-07-14
      • 2018-03-03
      • 2019-01-23
      • 1970-01-01
      • 2016-07-03
      • 2020-09-21
      • 2016-04-13
      相关资源
      最近更新 更多