javascript - NodeJS:注册用户后自动登录
问题描述
我在注册后尝试登录用户,但出现以下错误:
这是我的注册方法:
register(req, res, next) {
const errors = validationResult(req);
if (!errors.isEmpty()) {
req.flash('errors', errors.array({
onlyFirstError: true
}));
res.redirect('back');
} else {
const SQL = `SELECT email FROM users WHERE email = ${pool.escape(req.body.email)}`;
pool.query(SQL, (err, result) => {
if (result.length !== 0) {
req.flash('error_message', 'El email ofrecido ya está registrado. Vuelva a intentarlo.');
res.redirect('back');
} else {
const sql = 'INSERT INTO contact_app.users (username, email, password) VALUES (?, ?, ?)';
pool.query(sql, [req.body.username, req.body.email, Hash.encryptPass(req.body.password)],
(err) => {
if (err) {
console.error(err);
} else {
console.log('User registered correctly.');
}
});
initPassport();
req.login([req.body.email, req.body.password], (err) => {
if (err) {
return next(err);
} else {
res.redirect('/perfil');
}
});
}
});
}
}
感谢我的passport.js文件有错误,但是当我想正常登录时,它工作得很好。这是我的passport.js:
import passport from 'passport';
import { Strategy } from 'passport-local';
import pool from '../database/db';
import bcrypt from '../lib/bcrypt';
const initPassport = () => passport.use('local', new Strategy({
usernameField: 'email',
passwordField: 'password',
}, (username, password, done) => {
const sql = 'SELECT * FROM users where email = ?';
pool.query(sql, [username], (err, result) => {
if (err) {
console.log(err);
} else {
if (result.length > 0) {
const user = result[0];
const validPassword = bcrypt.matchPass(password, user.password);
if (validPassword) {
return done(null, user);
} else {
return done(null, false);
}
} else {
return done(null, false);
}
}
});
}));
passport.serializeUser((user, done) => {
return done(null, user.id);
});
passport.deserializeUser((id, done) => {
pool.query('SELECT * FROM users WHERE id = ?', [id], (err, result) => {
if (err) {
console.log(err);
} else {
if (result.length > 0) {
return done(null, result[0]);
} else {
return done(null, false);
}
}
});
});
export default initPassport;
我不确定在 req.login 方法中是否必须输入我注册的整个用户,或者只有电子邮件和密码才能与护照字段匹配。
提前致谢!
解决方案
推荐阅读
- c# - 如何自动更改新 .zip 文件的名称?
- activerecord - 如何将数据数组保存到数据库
- swift - 如何引用作为关联类型的协议的属性?
- react-native - 有没有办法更改顶部选项卡导航器的字体颜色和下划线颜色?
- javascript - 如何使用 .map 将数组的 php 数组转换为 js 数组以重新格式化
- amazon-web-services - AWS.Amplify 不是构造函数
- apache-kafka - Kafka Streams:如何修复 Serde 转换错误
- python - 如何将 Python/socket 读取的雷达数据(如 b'\x08\x00\x00\x00' 解码为数字
- javascript - 如何制作仅选择元素为真的条件 - Javascript
- spring-boot - 如何以角度 6 发送多部分请求?