【问题标题】:req.isAuthenticated() returns FALSE (express-session, passport-local)req.isAuthenticated() 返回 FALSE(快速会话,本地护照)
【发布时间】:2021-01-29 19:14:04
【问题描述】:

编辑:在我在 中声明使用路由器之前,我通过将 app.use(session({...}))register.js 转移到 app.js 来设置 cookie app.js。但是,问题 - req.isAuthenticated() 返回 false 仍然存在。

我正在尝试使用本地护照、快速会话和 mongodb 为我的后端构建注册流程。

当我注册一个新用户时,它似乎工作正常,并且用户可以根据需要在我的数据库中创建。我还可以在我的passport.authenticate() 回调帖子注册中访问req.user。但是,当我使用 res.redirect() 重定向到新路由时,req.isAuthenticated() 在我的新路由上返回 false。

在我的浏览器中检查 cookie 后,似乎 express-session 从未按预期保存会话。我的本地主机没有 cookie。我已经进行了数小时的研究,我遇到的大多数答案都与初始化时仔细检查代码序列有关。我已经这样做了无数次,并尝试同时使用passport.serializeUser(User.serializeUser());passport.serializeUser(function(user, done) { done(null, user.id); }); 来确保我正确地执行了该步骤。我似乎无法弄清楚为什么我会遇到这个问题。任何和所有的帮助将不胜感激!我的代码中的相关 sn-ps -

Register.js(路由器)

var express = require('express');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const passportLocalMongoose = require('passport-local-mongoose');
var router = express.Router();

const app = express();

app.use(bodyParser.urlencoded({extended: true}));

app.use(session({
  secret:"Edit Later.",
  resave:true,
  saveUninitialized:true
}));

app.use(passport.initialize());
app.use(passport.session());

const userSchema = new mongoose.Schema({
  name:String,
  username:String,
  contactNumber:String
});

userSchema.plugin(passportLocalMongoose);

passport.use(new LocalStrategy(User.authenticate()));


passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

router.post('/', function(req, res, next) {

  const reCaptchaKey = "<MYKEY>";
  var userCaptchaToken = req.body['g-recaptcha-response'];

  axios.post('https://www.google.com/recaptcha/api/siteverify', null, {params: {
    secret: reCaptchaKey,
    response: userCaptchaToken
  }}).then(response => {
    if (response.data.success === true) {

  User.register({username: req.body.username, name: req.body.fullName}, req.body.password, 
  function(err, user) {
        if (err) {
          console.log(err);
          // res.redirect('/views/register.html');
        } else {
          passport.authenticate('local', {session:true})(req, res, function() {

              console.log(req.user);
              console.log(req.session);
              res.redirect('/profile');
              console.log("Done!");
          });
        }
      });

    } else if (response.data.success === false) {
      console.log("Captcha failed.");
    }
  }).catch(error => {
    console.log(error);
  });

});

module.exports = router;


Profile.js(路由器)

const express = require('express');
const router = express.Router();

router.get('/', function(req, res) {
  if (req.isAuthenticated()) {
    res.render('profile')
  } else {
    res.redirect('/register')
    console.log('Not a user.')
  }
})


module.exports = router;

App.js

var registrationRouter = require('./routes/register');
var profileRouter = require('./routes/profile');

app.use('/register', registrationRouter);
app.use('/profile', profileRouter);

module.exports = app;

【问题讨论】:

    标签: express authentication passport.js express-session passport-local


    【解决方案1】:

    所以经过几个小时的尝试,我想通了。我的问题是我在 Register.js

    中使用了以下代码
    app.use(session({
      secret:"Edit Later.",
      resave:true,
      saveUninitialized:true
    }));
    
    app.use(passport.initialize());
    app.use(passport.session());
    

    这是一个问题,因为 Register.js 被用作路由器,我通过 App.js 将所有请求定向到此路由。这导致在 Register.js 处理请求之前未正确配置应用程序。以上几行是配置代码,必须写在 App.js 中的app.use('/register', registrationRouter); 之前。因此,解决方法就是将这些行移到 App.js 中,就像这样 -

    \\configure App
    
    app.use(session({
      secret:"Edit Later.",
      resave:true,
      saveUninitialized:true
    }));
    
    app.use(passport.initialize());
    app.use(passport.session());
    
    \\handle router
    
    app.use('/register', registrationRouter);
    
    
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 2016-04-01
      • 2020-11-29
      • 2015-09-28
      • 2019-06-23
      • 2016-10-27
      • 2019-07-09
      • 2015-05-20
      • 2017-11-01
      相关资源
      最近更新 更多