Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 护照号码';t重定向_Javascript_Node.js_Express_Passport.js_Passport Local - Fatal编程技术网

Javascript 护照号码';t重定向

Javascript 护照号码';t重定向,javascript,node.js,express,passport.js,passport-local,Javascript,Node.js,Express,Passport.js,Passport Local,我正在写一个本地注册策略,发现它不起作用,所以我退了一步,尝试对我的空收藏进行身份验证。每次我提交表单都需要30-40秒,直到结果超时。我确保调用了passport.authenticate(),但它似乎没有执行任何重定向,因此它正在超时,因为我也没有呈现某些内容 问题: function processSignup (req, res) { logger.info("POST request received") logger.info(req.body) passpo

我正在写一个本地注册策略,发现它不起作用,所以我退了一步,尝试对我的空收藏进行身份验证。每次我提交表单都需要30-40秒,直到结果超时。我确保调用了passport.authenticate(),但它似乎没有执行任何重定向,因此它正在超时,因为我也没有呈现某些内容

问题:

function processSignup (req, res) {
    logger.info("POST request received")
    logger.info(req.body)
    passport.authenticate('local', {
        successRedirect : '/profile', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    })
}
const LocalStrategy = require('passport-local').Strategy
const User = require('./user-model')
const passport = require('passport')

// expose this function to our app using module.exports
function config() {
    passport.serializeUser(function(user, done) {
        done(null, user.id)
    })

    // used to deserialize the user
    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            done(err, user)
        })
    })

    passport.use(new LocalStrategy(
        function(username, password, done) {
            User.findOne({ username: username }, function(err, user) {
                if (err) { return done(err); }
                if (!user) {
                    return done(null, false, { message: 'Incorrect username.' });
                }
                if (!user.validPassword(password)) {
                    return done(null, false, { message: 'Incorrect password.' });
                }
                return done(null, user);
            });
        }
    ));
}

module.exports = {
    config: config
}
// required for passport
require('./authentication/passport').config();
app.use(cookieParser())
app.use(bodyParser())
app.use(session({ 
    secret: 'secretToBeChanged',
    saveUninitialized: false,
    resave: false
}))
app.use(passport.initialize())
app.use(passport.session()) // persistent login sessions
app.use(flash()) // use connect-flash for flash messages stored in session
  • 我原以为它会重定向到failureUrl(即“/signup”),但实际上什么都没有发生。我做错了什么
  • 为什么没有来自passport的单一日志消息?这让我发疯,因为我完全不知道那里出了什么问题
  • 我是node.js的新手,就我所知,我不需要将配置好的passport对象传递给路由器,但我只需要执行
    const passport=require('passport')
    是否正确
  • 这是我的/signup路由的函数处理程序:

    function processSignup (req, res) {
        logger.info("POST request received")
        logger.info(req.body)
        passport.authenticate('local', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/signup', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        })
    }
    
    const LocalStrategy = require('passport-local').Strategy
    const User = require('./user-model')
    const passport = require('passport')
    
    // expose this function to our app using module.exports
    function config() {
        passport.serializeUser(function(user, done) {
            done(null, user.id)
        })
    
        // used to deserialize the user
        passport.deserializeUser(function(id, done) {
            User.findById(id, function(err, user) {
                done(err, user)
            })
        })
    
        passport.use(new LocalStrategy(
            function(username, password, done) {
                User.findOne({ username: username }, function(err, user) {
                    if (err) { return done(err); }
                    if (!user) {
                        return done(null, false, { message: 'Incorrect username.' });
                    }
                    if (!user.validPassword(password)) {
                        return done(null, false, { message: 'Incorrect password.' });
                    }
                    return done(null, user);
                });
            }
        ));
    }
    
    module.exports = {
        config: config
    }
    
    // required for passport
    require('./authentication/passport').config();
    app.use(cookieParser())
    app.use(bodyParser())
    app.use(session({ 
        secret: 'secretToBeChanged',
        saveUninitialized: false,
        resave: false
    }))
    app.use(passport.initialize())
    app.use(passport.session()) // persistent login sessions
    app.use(flash()) // use connect-flash for flash messages stored in session
    
    温斯顿打印:

    下午7:32:04-信息:收到POST请求下午7:32:04-信息: 用户名=dassd@dass.de,密码=dasdsa,提交=Register

    我的passport.js文件如下所示:

    function processSignup (req, res) {
        logger.info("POST request received")
        logger.info(req.body)
        passport.authenticate('local', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/signup', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        })
    }
    
    const LocalStrategy = require('passport-local').Strategy
    const User = require('./user-model')
    const passport = require('passport')
    
    // expose this function to our app using module.exports
    function config() {
        passport.serializeUser(function(user, done) {
            done(null, user.id)
        })
    
        // used to deserialize the user
        passport.deserializeUser(function(id, done) {
            User.findById(id, function(err, user) {
                done(err, user)
            })
        })
    
        passport.use(new LocalStrategy(
            function(username, password, done) {
                User.findOne({ username: username }, function(err, user) {
                    if (err) { return done(err); }
                    if (!user) {
                        return done(null, false, { message: 'Incorrect username.' });
                    }
                    if (!user.validPassword(password)) {
                        return done(null, false, { message: 'Incorrect password.' });
                    }
                    return done(null, user);
                });
            }
        ));
    }
    
    module.exports = {
        config: config
    }
    
    // required for passport
    require('./authentication/passport').config();
    app.use(cookieParser())
    app.use(bodyParser())
    app.use(session({ 
        secret: 'secretToBeChanged',
        saveUninitialized: false,
        resave: false
    }))
    app.use(passport.initialize())
    app.use(passport.session()) // persistent login sessions
    app.use(flash()) // use connect-flash for flash messages stored in session
    
    我的app.js的相关剪贴:

    function processSignup (req, res) {
        logger.info("POST request received")
        logger.info(req.body)
        passport.authenticate('local', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/signup', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        })
    }
    
    const LocalStrategy = require('passport-local').Strategy
    const User = require('./user-model')
    const passport = require('passport')
    
    // expose this function to our app using module.exports
    function config() {
        passport.serializeUser(function(user, done) {
            done(null, user.id)
        })
    
        // used to deserialize the user
        passport.deserializeUser(function(id, done) {
            User.findById(id, function(err, user) {
                done(err, user)
            })
        })
    
        passport.use(new LocalStrategy(
            function(username, password, done) {
                User.findOne({ username: username }, function(err, user) {
                    if (err) { return done(err); }
                    if (!user) {
                        return done(null, false, { message: 'Incorrect username.' });
                    }
                    if (!user.validPassword(password)) {
                        return done(null, false, { message: 'Incorrect password.' });
                    }
                    return done(null, user);
                });
            }
        ));
    }
    
    module.exports = {
        config: config
    }
    
    // required for passport
    require('./authentication/passport').config();
    app.use(cookieParser())
    app.use(bodyParser())
    app.use(session({ 
        secret: 'secretToBeChanged',
        saveUninitialized: false,
        resave: false
    }))
    app.use(passport.initialize())
    app.use(passport.session()) // persistent login sessions
    app.use(flash()) // use connect-flash for flash messages stored in session
    

    快速查看passportjs的文档后,我认为您需要执行以下操作:

    function processSignup (req, res, next) {
        logger.info("POST request received")
        logger.info(req.body)
        const handler = passport.authenticate('local', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/signup', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        });
        handler(req, res, next);
    }
    
    passport.authenticate()
    返回用作路由处理程序函数的函数。
    通常,您会键入以下内容:

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

    但是,由于您已经使用自己的route handler函数进行了抽象,因此需要调用从
    passport.authenticate()

    返回的函数。快速查看passportjs的文档后,我认为您需要执行以下操作:

    function processSignup (req, res, next) {
        logger.info("POST request received")
        logger.info(req.body)
        const handler = passport.authenticate('local', {
            successRedirect : '/profile', // redirect to the secure profile section
            failureRedirect : '/signup', // redirect back to the signup page if there is an error
            failureFlash : true // allow flash messages
        });
        handler(req, res, next);
    }
    
    passport.authenticate()
    返回用作路由处理程序函数的函数。
    通常,您会键入以下内容:

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

    但是,由于您已经使用自己的route handler函数进行了抽象,因此需要调用从
    passport.authenticate()
    返回的函数。最后,Mikael Lennholm是正确的,他为我指出了正确的方向。我在任何passport.js教程中都找不到。但是,passport.js文档包含此代码段,它表示相同的内容,但我更喜欢它的代码样式:

    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.redirect('/login'); }
        req.logIn(user, function(err) {
          if (err) { return next(err); }
          return res.redirect('/users/' + user.username);
        });
      })(req, res, next);
    

    最后,米凯尔·伦霍姆是对的,他为我指明了正确的方向。我在任何passport.js教程中都找不到。但是,passport.js文档包含此代码段,它表示相同的内容,但我更喜欢它的代码样式:

    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err); }
        if (!user) { return res.redirect('/login'); }
        req.logIn(user, function(err) {
          if (err) { return next(err); }
          return res.redirect('/users/' + user.username);
        });
      })(req, res, next);
    

    不熟悉passport,但我非常确定您需要对
    res
    对象进行一些操作,否则请求将永远不会得到响应。我的猜测是您以某种方式将对象提供给
    passport.authenticate()
    函数,以便它能够处理它。我不熟悉passport,但我非常确定您需要对
    res
    对象进行处理,否则请求将永远不会得到响应。我的猜测是您以某种方式将对象提供给
    passport.authenticate()
    函数,以便它能够处理它。我尝试了此操作,但最终出现了500错误:7:57:42 PM-warn:httpStatuscode=500,errorMessage=TypeError:next不是函数7:57:42 PM-error:TypeError:next不是Strategy.module.exports.Strategy.error(c:\Users***\Documents\tms reworked\node\U modules\passport\lib\middleware\authenticate.js:343:9)啊,需要传递传递给路由处理函数的第三个参数,据我所知,我已经更新了我的回答,这只是自定义回调,但我的原始代码应该可以工作,不是吗?因为我现在在使用其他passport函数时又遇到了同样的问题。@kent或者您原始代码的问题是,您没有对
    passport.authenticate()
    返回的处理程序函数执行任何操作。您不会将其作为路由处理程序应用,也不会在自己的路由处理程序函数中调用它,因此
    res
    永远不会被任何东西处理。“自定义回调”不是同一回事,只是在功能上处理身份验证成功,而不是发送配置对象并让passport处理。在屏幕截图中的示例中,
    passport.authenticate()
    返回的函数直接作为路由上的处理函数应用,这意味着当调用路由时,路由系统正在传递
    req,res,next
    。但在您的代码中,
    processSignup
    是作为路由处理程序应用的函数,路由系统使用
    req,res,next
    调用该函数。
    passport.authenticate()
    返回的函数会处理响应,但只有在使用
    res,req,next
    调用该函数时才会处理响应,这在您的原始代码中从未发生过。我尝试过此操作,但最终导致500错误:7:57:42 PM-warn:httpStatuscode=500,errorMessage=TypeError:next不是函数7:57:42 PM-error:TypeError:next不是Strategy.module.exports.Strategy.error(c:\Users***\Documents\tms reworked\node\U modules\passport\lib\middleware\authenticate.js:343:9)啊,需要传递传递给路由处理函数的第三个参数,据我所知,我已经更新了我的回答,这只是自定义回调,但我的原始代码应该可以工作,不是吗?因为我现在在使用其他passport函数时又遇到了同样的问题。@kent或者您原始代码的问题是,您没有对
    passport.authenticate()
    返回的处理程序函数执行任何操作。您不会将其作为路由处理程序应用,也不会在自己的路由处理程序函数中调用它,因此
    res
    永远不会被任何东西处理。“自定义回调”不是同一回事,它只是一个问题