Javascript 将头发送到nodejs中的客户端后无法设置头
我有一张登录表。在此表单中,我使用passport查找用户。当我发送请求时,它会显示错误 这是我的代码: passport.local:Javascript 将头发送到nodejs中的客户端后无法设置头,javascript,node.js,Javascript,Node.js,我有一张登录表。在此表单中,我使用passport查找用户。当我发送请求时,它会显示错误 这是我的代码: passport.local: passport.use('local.login' , new localStrategy({ usernameField : 'phoneNumber', passwordField : 'password', passReqToCallback : true } , (req , phoneNumber, password ,
passport.use('local.login' , new localStrategy({
usernameField : 'phoneNumber',
passwordField : 'password',
passReqToCallback : true
} , (req , phoneNumber, password , done) => {
UserModel.findOne({'phoneNumber' : phoneNumber} , (err , user)=>{
if(err) return done(err)
if(! user || ! user.ValidationPassword(password)) return done(null , false , req.flash('errors' , 'کاربری با این مشخصاتا در سیستم ثبت نشده است'));
console.log(err,user)
done(null , user);
})
}))
async LoginProcess(req, res, next) {
var result = await this.formValidation(req, res);
if (result) {
this.Login(req, res, next)
}
return res.redirect('/auth/login');
}
Login(req, res, next) {
passport.authenticate('local.login', (err, user) => {
console.log(user, err)
if (!user) return res.redirect('login')
req.login(user, err => {
if (err) console.log(err)
if (req.body.remember) {
user.setRememberToken(res)
}
return res.redirect('/');
})
})(req, res, next)
}
登录控制器:
passport.use('local.login' , new localStrategy({
usernameField : 'phoneNumber',
passwordField : 'password',
passReqToCallback : true
} , (req , phoneNumber, password , done) => {
UserModel.findOne({'phoneNumber' : phoneNumber} , (err , user)=>{
if(err) return done(err)
if(! user || ! user.ValidationPassword(password)) return done(null , false , req.flash('errors' , 'کاربری با این مشخصاتا در سیستم ثبت نشده است'));
console.log(err,user)
done(null , user);
})
}))
async LoginProcess(req, res, next) {
var result = await this.formValidation(req, res);
if (result) {
this.Login(req, res, next)
}
return res.redirect('/auth/login');
}
Login(req, res, next) {
passport.authenticate('local.login', (err, user) => {
console.log(user, err)
if (!user) return res.redirect('login')
req.login(user, err => {
if (err) console.log(err)
if (req.body.remember) {
user.setRememberToken(res)
}
return res.redirect('/');
})
})(req, res, next)
}
当我发送请求时,它会显示以下错误:
events.js:292
throw er; // Unhandled 'error' event
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:518:11)
at ServerResponse.header (/home/mrcoder/Projects/Nodejs/Store/node_modules/express/lib/response.js:771:10)
at ServerResponse.location (/home/mrcoder/Projects/Nodejs/Store/node_modules/express/lib/response.js:888:15)
at ServerResponse.redirect (/home/mrcoder/Projects/Nodejs/Store/node_modules/express/lib/response.js:926:18)
at /home/mrcoder/Projects/Nodejs/Store/app/http/controller/Login.js:25:35
at allFailed (/home/mrcoder/Projects/Nodejs/Store/node_modules/passport/lib/middleware/authenticate.js:107:18)
at attempt (/home/mrcoder/Projects/Nodejs/Store/node_modules/passport/lib/middleware/authenticate.js:180:28)
at Strategy.strategy.fail (/home/mrcoder/Projects/Nodejs/Store/node_modules/passport/lib/middleware/authenticate.js:302:9)
at verified (/home/mrcoder/Projects/Nodejs/Store/node_modules/passport-local/lib/strategy.js:82:30)
at /home/mrcoder/Projects/Nodejs/Store/app/passport/registerPassportValidation.js:44:66
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/model.js:4883:16
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/model.js:4883:16
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/model.js:4906:21
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/query.js:4390:11
at /home/mrcoder/Projects/Nodejs/Store/node_modules/kareem/index.js:135:16
Emitted 'error' event on Function instance at:
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/model.js:4885:13
at /home/mrcoder/Projects/Nodejs/Store/node_modules/mongoose/lib/helpers/promiseOrCallback.js:24:16
[... lines matching original stack trace ...]
at /home/mrcoder/Projects/Nodejs/Store/node_modules/kareem/index.js:135:16
at processTicksAndRejections (internal/process/task_queues.js:79:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...
有什么问题?如何解决此问题?在if中的
登录过程
函数中,将此行从this.Login(req,res,next)
更改为返回此。登录(req,res,next)
@AhmedKhattab谢谢。它起作用了。在if中的LoginProcess
函数中,将此行从this.Login(req,res,next)
更改为返回此.Login(req,res,next)
@AhmedKhattab谢谢。成功了。