Mr *_*bot 3 error-handling node.js express jwt passport.js
passport-jwt
如果用户为假(电子邮件|密码为空`)并且如果用户未注册,则已实现并尝试抛出自定义错误响应
api.js
const passport = require('passport');
const router = require('express-promise-router')();
const passportHelper = require('../helpers/passportHelper');
const authController = require('../controllers/authController');
const { badRequest } = require('../helpers/responseHelper');
const requireAuth = passport.authenticate('jwt', { session: false });
const requireSignin = passport.authenticate('local', { session: false }, (err, user, info) => {
if(!user) {
const err = new Error('please provide email and password.');
err.status = 400;
err.code = 'CP_SI_ValidationFailed';
return err;
}
});
router.post('/signup', authController.signup);
router.post('/signin', requireSignin, authController.signin);
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
当我尝试与邮递员登录时,我没有收到任何回复
预期结果
{
"error": {
"code": "CP_SI_ValidationFailed",
"message": "email and password is required"
}
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来处理 badRequest 并返回上面的响应,
谢谢你
这是一个确实返回响应的更新答案。
const requireSignin = (req, res, next) => {
passport.authenticate('local', { session: false }, (err, user, info) => {
if (err || !user) {
const err = {};
err.status = 400;
err.code = 'CP_SI_ValidationFailed';
return res.json(err); // send the error response to client
}
return next(); // continue to next middleware if no error.
})(req, res, next); /* passport.authentication returns a function,
we invoke it with normal req..res arguments
to override default functionality */
}
Run Code Online (Sandbox Code Playgroud)
从 Passport.authenticate 回调返回错误是不够的。返回值不由护照处理。如果你想向客户端返回自定义错误,你应该编写一个自定义中间件。如果您将requireSignin
方法更改为如下所示,它应该按预期工作:
const requireSignin = function(req, res, next) {
passport.authenticate('local', { session: false }, (err, user, info) => {
if(err || !user) {
const err = {};
err.status = 400;
err.code = 'CP_SI_ValidationFailed';
return res.json(err); // send the error response to client
}
return next(); // continue to next middleware if no error.
})(req, res, next);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3349 次 |
最近记录: |