我正在尝试创建一个利用注册和登录功能的应用程序。我已经完成了注册部分,其中所有信息(电子邮件和密码)均已成功传递并保存到 MySQL 数据库中。
问题:我现在的问题是,当我输入任何现有的凭据和电子邮件时,应用程序将挂起并拒绝将用户重定向到新页面。在我的浏览器底部,它会显示“正在等待本地主机...”。如果我将页面放置太久,最终会导致出现错误页面,并显示“此页面无法正常工作。本地主机未发送任何数据。ERR_EMPTY_RESPONSE”。
我尝试控制台记录任何错误,但无法识别任何原因/错误。我确实确保我输入的信息与数据库表中的值正确进行比较,并且页面重定向正常运行。我还尝试以多种方式重写我的代码,但最终遇到了同样的问题。
下面是我的passport.js 文件:
var LocalStrategy = require('passport-local').Strategy;
// Load User model
const User = require('../models/User');
// Reference: http://www.passportjs.org/docs/
module.exports = function (passport) {
passport.use(
new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
// Match user
User.findOne({ which: { email: email } })
.then(user => {
// Check if Email exists in database
if (!user) {
return done(null, false, {
message: "Email is not registered."
});
}
// Check if password matches the one found in the database (To Do: Encrypt this later!)
if (password != user.password) {
return done(null, false, { message: 'Password is incorrect.' });
} else {
return done(null, user);
}
})
.catch(err => console.log(err));
})
);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
// Find by Primary Key
User.findByPk(id, function (err, user) {
console.log(user);
done(err, user);
});
});
}
下面是我的app.js(服务器)文件:
var express = require('express')
var expressLayouts = require('express-ejs-layouts');
var flash = require('connect-flash');
var session = require('express-session');
var passport = require('passport');
var app = express();
// Embedded JavaScript (EJS)
app.use(expressLayouts);
app.set('view engine', 'ejs');
// Express Session
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: false
}));
// Bodyparser
app.use(express.urlencoded({ extended: false }));
// Passport
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
// Connect flash for notification messages
app.use(flash());
// Global Variables to define specific notification messages
app.use((req, res, next) => {
// Notification for Registration Page
res.locals.success_msg = req.flash('success_msg')
res.locals.error_msg = req.flash('error_msg');
// Notification for Passport Login Verification
res.locals.error = req.flash('error');
next();
});
// Routes
app.use('/', require('./routes/index'));
// Login/Register Endpoints routes (ex. /users/login)
app.use('/users', require('./routes/users'));
// Image
//app.use(express.static('./public'));
var port = process.env.PORT || 8026;
app.listen(port);
console.log('Server Running');
console.log("Port: " + port);
下面是我处理登录和重定向的函数:
router.post('/login', (req, res, next) => {
console.log(req.body);
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/users/login',
failureFlash: true
})(req, res, next);
});
如果您需要任何其他信息,请告诉我。谢谢!
最佳答案
我认为这可能是一个问题。在 passport.use
上,如果发生错误,您不会返回任何内容。
passport.use(
new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
// Match user
User.findOne({ which: { email: email } })
.then(user => {
// Check if Email exists in database
if (!user) {
return done(null, false, {
message: "Email is not registered."
});
}
// Check if password matches the one found in the database (To Do: Encrypt this later!)
if (password != user.password) {
return done(null, false, { message: 'Password is incorrect.' });
} else {
return done(null, user);
}
})
.catch(err =>{
console.log(err));
return done(null, false, { message: 'Internal Server error.' });
}
})
关于javascript - Passport.js 使用 MySQL 和 Node.js 成功登录挂起,没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59132408/