【问题标题】:isAuthenticated is always false while using passport with sequelize在使用带有 sequelize 的护照时,isAuthenticated 总是错误的
【发布时间】:2016-06-03 05:20:39
【问题描述】:

虽然尝试让 isAuthenticated 作为中间件检查工作,但我似乎无法做到这一点。我已经记录了结果,每次无论我尝试了什么,它总是最终是错误的。我想就为什么会发生这种情况获得一些帮助。提前感谢所有愿意帮助我的人。如果有帮助的话,我使用的数据库是 mysql。

function isLoggedIn(req, res, next) {

 if (req.isAuthenticated()){
     console.log('user logged in', req.user);
     return next();
 }else{
    console.log('user not logged in');
    res.redirect('/login');
}

}

这是我的路线

app.post('/login', passport.authenticate('local-login', {
    successRedirect : '/admin', 
    failureRedirect : '/login', 
    failureFlash : true 
}));

还有我的 passport.js 本地策略

passport.use('local-login', new LocalStrategy({
    usernameField : 'username',
    passwordField : 'password',
    passReqToCallback : true 
},
function(req, username, password, done) {
    models.User.find({ where:{'username' :username }}).then(function(user) {
        passwd = user ? user.password : ''
        if (!user)
            return done(null, false, req.flash('loginMessage', 'No user found.')); 

        if (!models.User.validPassword(password, passwd))
            return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); 

        return done(null, user);
    });
}));

我像这样设置了我的 server.js

 app.use(morgan('dev')); // log every request to the console
 app.use(cookieParser()); // read cookies (needed for auth)
 app.use(bodyParser.json()); // get information from html forms
 app.use(bodyParser.urlencoded({ extended: true }));

 app.use(express.static(path.join(__dirname, 'public')));
 app.set('view engine', 'ejs'); 

 app.use(session({
    secret: 'tengence' ,
    saveUninitialized: true,
    resave: true
 })); // session secret
 require('./config/passport')(passport);
 app.use(passport.initialize());
 app.use(passport.session()); // persistent login sessions
 app.use(flash()); 

 require('./app/routes.js')(app, passport);

 app.listen(port);
 console.log('Server started at ' + port);

【问题讨论】:

    标签: node.js passport.js sequelize.js


    【解决方案1】:

    我觉得自己像个白痴,因为我忘了添加这个恰好调用登录的小方法。这是一整天的编码,我猜我的眼睛需要休息。

     ///Very important to not to forget to do below!!
            req.login(user, function(err){
                if (err) {
                    return done(null, false, req.flash('loginMessage', 'Something went wrong.' + err));
                }
            });
    

    【讨论】:

    • 请将此答案标记为已接受的答案,因为这样它就不会显示为未回答的问题。 :)
    • 根据堆栈溢出,我不能直到明天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2020-10-25
    • 2012-12-20
    • 2018-08-11
    • 1970-01-01
    • 2019-01-02
    • 2021-02-05
    相关资源
    最近更新 更多