【问题标题】:client-sessions module with passportjs带有passportjs的客户端会话模块
【发布时间】:2018-12-02 03:34:47
【问题描述】:

我的代码粘贴在下面。在回调方法中,我设置了用户,但是当我重定向到“/”时,用户不再可用。我正在使用护照和客户会话。任何帮助将不胜感激。我最初使用 req.session 并根据此 link

进行了更改

谢谢。

app.get('/', function (req, res) {
if (req.session_state.user == null) {
passport.authenticate('azureoauth', { failureRedirect: './'})
}
else {
res.render('index', {user: req.session_state.user});
}
});

//This gets called by an external internet application

app.get('/auth/azureOAuth/callback', 
passport.authenticate('azureoauth', {}),
function (req, res) {
req.session_state.user = req.user;
res.redirect("/");
});

在我的 app.js 中,我有以下代码:

const clientSession = require("client-sessions");
app.use(clientSession({secret: 'blablabla', duration: 1000 * 60 * 60 * 24 * 365 * 10}));
app.use(passport.initialize()); // for user authentication/authorization
app.use(passport.session());

【问题讨论】:

  • 我对passport不熟悉,但是您是否将会话名称设置为“session_state”?

标签: node.js redirect session-variables


【解决方案1】:

我发现this article 非常有用,尤其是这一点:

app.use(function(req, res, next) {
  if (req.session && req.session.user) {
    User.findOne({ email: req.session.user.email }, function(err, user) {
      if (user) {
        req.user = user;
        delete req.user.password; // delete the password from the session
        req.session.user = user;  //refresh the session value
        res.locals.user = user;
      }
      // finishing processing the middleware and run the route
      next();
    });
  } else {
    next();
  }
});

【讨论】:

    【解决方案2】:

    Passport 期望会话 cookie 被命名为“会话”。只要您设置了{cookieName: 'session'}client-sessions 就可以用作express-session 的直接替代品。请务必删除express-session,否则两者会冲突。

    const config = require('config');
    const express = require('express');
    const passport = require('passport');
    const sessions = require('client-sessions');
    
    const app = express();
    
    // passport expects the cookie to be named "session"
    app.use(sessions({
        secret: config.get('SESSION_SECRET'), // extremely secret
        cookieName: 'session', // automatically used by passport sessions
    }));
    
    // config passport
    passport.use(SomeStrategy);
    passport.serializeUser((user, done) => done(null, JSON.stringify(user)));
    passport.deserializeUser((userStr, done) => done(null, JSON.parse(userStr)));
    app.use(passport.initialize());
    app.use(passport.session());
    

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2011-06-14
      • 2017-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多