Javascript 护照号码';t重定向
我正在写一个本地注册策略,发现它不起作用,所以我退了一步,尝试对我的空收藏进行身份验证。每次我提交表单都需要30-40秒,直到结果超时。我确保调用了passport.authenticate(),但它似乎没有执行任何重定向,因此它正在超时,因为我也没有呈现某些内容 问题: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
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
const passport=require('passport')
是否正确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
永远不会被任何东西处理。“自定义回调”不是同一回事,它只是一个问题