如何在控制器中使用护照中间件

时间:2018-05-16 07:27:42

标签: node.js mongodb express passport.js passport-local

尝试设置护照本地。使用此guide作为灵感。

我遇到的问题是,当我从routes-file调用函数时,到控制器文件它不会工作。如果我把来自controller-file的代码放在routes-file中就行了。

这是我的app.js



module.exports = (app) => {
const user = require('../controllers/controller.user.js');
const passport      = require('passport');

// Visa Logga in-sidan
app.get('/login', user.login)

// Visa registreringssidan
app.get('/signup', user.signup)

// Skapa user
app.post('/signup', user.createUser)

}




这是routes.user.js

const User          = require('../models/user.js');
const passport      = require('passport');

require('../../config/passport')(passport)

exports.login = (req, res) => {
    res.render('pages/login', { message: req.flash('loginMessage') });     
};

exports.signup = (req, res) => {
    res.render('pages/signup', { message: req.flash('signupMessage') });     
};

exports.createUser = (req, res) => {
    passport.authenticate('local-signup', {
        successRedirect : '/all', // redirect to the secure profile section
       failureRedirect : '/signup', // redirect back to the signup page if there is an error
       failureFlash : true // allow flash messages
   });    
};

这是controller.user.js



passport.authenticate('local-signup', {
        successRedirect : '/all', // redirect to the secure profile section
       failureRedirect : '/signup', // redirect back to the signup page if there is an error
       failureFlash : true // allow flash messages
   });




当我尝试注册用户时,它会超时。没有更多,只是超时。

但是如果我从controller.user.js移动这部分......



    // Skapa user
    app.post('/signup', passport.authenticate('local-signup', {
        successRedirect : '/all', // redirect to the secure profile section
       failureRedirect : '/signup', // redirect back to the signup page if there is an error
       failureFlash : true // allow flash messages
   }));




...到routes.user.js



{{1}}




..一切正常。

为什么它在controller.user.js文件中不起作用?

2 个答案:

答案 0 :(得分:1)

找到了这个; Passport Authenticate doesn't redirect

@IdanDagan发布的解决方案相同。

我在controller.user.js

中更改了这部分

exports.createUser = (req, res, next) => {
    passport.authenticate('local-signup', {
        successRedirect : '/all', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    });
};

以下

exports.createUser = (req, res, next) => {
    passport.authenticate('local-signup', {
        successRedirect : '/all', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    })(req, res, next);
};

......现在它充当了魅力!

感谢您的帮助。希望这也可以帮助其他人。

答案 1 :(得分:0)

您希望在exportsmodule.exports之间看起来有所不同,并在控制器中使用module.exports代替exports