如何实施已经与 REGISTER 路线一起使用的 express-validator 以与 passport-local LOGIN 一起使用?
How to implement express-validator, which already works with REGISTER route, to work with passport-local LOGIN?
在我的路线文件中有
const express = require("express");
const { body, check, validationResult } = require("express-validator/check");
const passport = require("passport");
const User = require("../models/User");
非常适合我的注册路线
router.post("/register",
check('username').isEmail().withMessage("You need email for username registration"),
check("password").custom((value, { req }) => {
if (value !== req.body.password2) {
throw new Error("Password confirmation failed")
} else {
return true;
}
}),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
errors.array().forEach(err => req.flash('error', err.msg));
return res.redirect('/register');
}
const newUser = new User({ username: req.body.username });
User.register(newUser, req.body.password, (err, user) => {
if (err) {
console.log(err);
return res.redirect('back');
}
passport.authenticate('local')(req, res, () => {
res.redirect('/blogs');
})
});
});
但我无法在 login passport 路由中实现该逻辑,所以我基本上
想知道如何将 express-validator 放入 passport login logic
router.post("/login", check('username').isEmail(), passport.authenticate("local", {
failureRedirect: "/login"
}), function (req, res) {
req.flash('success', 'You are successfuly Sign In');
res.redirect("/blogs");
});
这是最适合我的。
router.post("/login",
[check('username').isEmail().withMessage("username should be an email")],
(req, res, next) => {
// Check validation.
const errors = validationResult(req);
if (!errors.isEmpty()) {
errors.array().forEach(err => req.flash('error', err.msg));
return res.redirect('/login');
}
next();
},
// If validation succeeds, go on with passport authentication logic.
passport.authenticate("local", {...
...
});
);
您必须根据文档将验证逻辑放在一个数组中,并且您应该对 register
路由执行相同的操作。
在我的路线文件中有
const express = require("express");
const { body, check, validationResult } = require("express-validator/check");
const passport = require("passport");
const User = require("../models/User");
非常适合我的注册路线
router.post("/register",
check('username').isEmail().withMessage("You need email for username registration"),
check("password").custom((value, { req }) => {
if (value !== req.body.password2) {
throw new Error("Password confirmation failed")
} else {
return true;
}
}),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
errors.array().forEach(err => req.flash('error', err.msg));
return res.redirect('/register');
}
const newUser = new User({ username: req.body.username });
User.register(newUser, req.body.password, (err, user) => {
if (err) {
console.log(err);
return res.redirect('back');
}
passport.authenticate('local')(req, res, () => {
res.redirect('/blogs');
})
});
});
但我无法在 login passport 路由中实现该逻辑,所以我基本上 想知道如何将 express-validator 放入 passport login logic
router.post("/login", check('username').isEmail(), passport.authenticate("local", {
failureRedirect: "/login"
}), function (req, res) {
req.flash('success', 'You are successfuly Sign In');
res.redirect("/blogs");
});
这是最适合我的。
router.post("/login",
[check('username').isEmail().withMessage("username should be an email")],
(req, res, next) => {
// Check validation.
const errors = validationResult(req);
if (!errors.isEmpty()) {
errors.array().forEach(err => req.flash('error', err.msg));
return res.redirect('/login');
}
next();
},
// If validation succeeds, go on with passport authentication logic.
passport.authenticate("local", {...
...
});
);
您必须根据文档将验证逻辑放在一个数组中,并且您应该对 register
路由执行相同的操作。