不在护照快递服务器上保存会话

Posted

技术标签:

【中文标题】不在护照快递服务器上保存会话【英文标题】:Not saving session on passport express server 【发布时间】:2017-09-18 14:11:12 【问题描述】:

将 node.js 与 express 服务器一起使用,我的目的是在会话中保存已登录的本地用户,以便我可以从前端调用它并在用户实际登录时获取用户信息。

为此,我正在使用快速会话和护照。如果正确登录并将会话保存在 req 中,以下代码将返回用户。

我已调试查询并正确返回数据。

passport.use('local-login', new LocalStrategy(
  usernameField: 'email',
  passwordField: 'pass',
  passReqToCallback: true
,
function(req, email, pass, done) 

 return modelUsers.login(email, pass, done);

));

这是我的会话配置。

 app.use(session(
  resave: true,
  saveUninitialized: true,
  secret: 'strongertogether',
  cookie:  secure: false 
  )); // session secret
app.use(passport.initialize());
app.use(passport.session());   // Persistent login sessions
app.use(cors());               //Required for signin facebook

据我所知,一旦登录完成,用户就会保存在会话中,并且函数 req.isAuthenticated() 应该返回一个真值,但它是假的,req.user 是未定义的.

事实 twitter 和 facebook 会话正常工作。

从我调用的前端(Angular.js)

app.get('/api/loggedin', usersController.loggedin);

那就去

function loggedin(req, res) 
 res.send(req.isAuthenticated() ? req.user : '0');

版本:

“快递”:“^4.9.3”

“快速会话”:“^1.11.3”

“本地护照”:“^1.0.0”

“护照”:“^0.2.2”

【问题讨论】:

我没有仔细阅读您的代码,但我的这个苏格兰威士忌有助于理解您的问题https://scotch.io/tutorials/easy-node-authentication-setup-and-local。我正在使用相同的方法并且对我来说工作得很好。浏览链接可能我使用的东西丢失了。 【参考方案1】:

您是否阅读过护照本地文件?

passport-local npm

您是否在您的路线中使用了类似 sn-ps 的路线?

app.post('/login', 
  passport.authenticate('local',  failureRedirect: '/login' ),
   function(req, res) 
  res.redirect('/');
);

您可以在本地护照文件中找到上面的代码。

或者你可以试试看这里:https://github.com/egin10/login-passport/blob/master/routes/users.js

【讨论】:

以上是关于不在护照快递服务器上保存会话的主要内容,如果未能解决你的问题,请参考以下文章

Apollo express 没有快速护照会话

如何彻底销毁护照/快递会话?

req.user 未定义 - 节点 + 快递 + 护照-facebook

护照js如何在会话中存储用户对象?

护照谷歌身份验证非持久性

与护照、mongodb 和 express 的持久会话