В моем коде есть свойства successRedirect
и failureRedirect
passport.js
, и я бы хотел, чтобы они запустили один раз express-validator 6.0.1
check()
поля email и пароля.
Моя страница регистрации:
<form action="/user/signup" method="post">
<div class="form-group">
<label for="email">E-mail</label>
<input type="text" id="email" name="email" class="form-control">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="text" id="password" name="password" class="form-control">
</div>
<input type="hidden" name="_csrf" value="{{ csrfToken }}">
<button type="submit">Sign Up</button>
Мой роутер:
const { check, validationResult } = require('express-validator');
router.post("/user/signup", passport.authenticate("local.signup",
[
check('email').isEmail(),
check('password').isLength({ min: 5 })
],
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
},
{
successRedirect: "/user/profile",
failureRedirect: "/user/signup",
failureFlash: true
}));
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id, function(err, user) {
done(err, user);
});
});
Мой паспорт.js:
var passport = require("passport");
var User = require("../models/user");
var LocalStrategy = require("passport-local").Strategy;
passport.use("local.signup", new LocalStrategy({
usernameField: "email",
passwordField: "password",
passReqToCallback: true
}, (req, email, password, done) => {
User.findOne({"email": email}, (err, user) => {
if(err) {
return done(err);
}
if (user) {
return done(null, false, {message: "Email is already in use."});
}
var newUser = new User();
newUser.email = email;
newUser.password = newUser.encryptPassword(password);
newUser.save((err, result) => {
if (err) {
return done(err);
}
return done(null, newUser);
});
});
}));
Я новичок в экспресс-валидаторе, и я попробовал его в своем роутере. Но когда я запустил свой app.js
и нажал кнопку регистрации, я получил TypeError: Cannot read property 'Symbol(express-validator#contexts)' of null.
в терминале. Что я делаю не так и как я могу добавить express-validator 6.0.1
в мой код? Спасибо за ваше время.