我可以很好地注册,但是当我被引导到我的游戏路径时,我会得到一个默认的错误页面,它只是白色的
[object Object]
[对象对象]
起初我以为这和socket.io有关,但还没到那个地步。我想这可能是一些护照和我如何配置它的东西,没有设置好我要去的承诺路线,但我完全失去了。我不知道这个错误到底发生在哪里。
这是护照文件:
/*jshint esversion: 6 */
const LocalStrategy = require('passport-local').Strategy;
const db = require('../config/db');
const bcrypt = require('bcryptjs');
let io = require('./io');
module.exports = (passport) => {
// Local Strategy login
passport.use('local-login',
new LocalStrategy((username, password, done) => {
console.log('username');
// Match Username
let sql = 'SELECT * FROM users WHERE username = ?';
db.query(sql, [username]).then(results => {
if (!results.length) {
return done(null, false, {
type: 'loginMessage',
message: 'Wrong Login',
});
}
console.log('password');
// Match Password
bcrypt.compare(password, results[0].password, (err, isMatch) => {
if (isMatch) {
console.log('Password is correct');
return done(null, results[0]);
} else {
return done(null, false, {
type: 'loginMessage',
message: 'Wrong Login',
});
}
});
});
}));
// =========================================================================
// passport session setup ==================================================
// =========================================================================
// used to serialize the user for the session
passport.serializeUser((user, done) => {
console.log(user.username + ' has been Serialized');
done(null, user.id);
});
// used to deserialize the user
passport.deserializeUser((id, done) => {
db.query('SELECT * FROM users WHERE id = ?', [id]).then(results => {
console.log(results[0].username + ' has been deserialized');
done(results[0]);
});
});
};
这似乎是顺利完成的,下面是我的登录重定向:
// Login Process
router.post('/login',
passport.authenticate('local-login', {
successRedirect: '/game',
failureRedirect: '/',
failureFlash: true,
}), (req, res) => {
console.log('login route test');
});
// Passport config
require('./config/passport')(passport);
app.use(passport.initialize());
app.use(passport.session());
app.get('*', function (req, res, next) {
res.locals.user = req.user || null;
next();
});
然后游戏路线:
//Route to game app
app.get('/game', function (req, res) {
console.log('Log before it checks req.user');
if (req.user) {
console.log('req.user is working');
res.render('game');
} else {
req.flash('error', 'You need to be signed in!');
res.redirect('/');
}
});
所以这里的问题是:当我没有登录到
/game
路线它将踢回我的主要路线与正确的闪光错误。但是,当我登录时,我不能让它在我的生命中
console.log()
req.user
登录时,但我不知道为什么,也不知道如何登录。如果需要更多的信息,我可以给更多。。。但这主要是所有人处理登录过程的方式(除了socket.io,但它甚至还没有到达那个点,而我的socket.io文件所做的只是发送数据客户端以便于更新)。
我会继续尝试我的运气,但由于我是新的承诺,这可能是原因,如果它是,我可能不会这么幸运。
编辑:而且,我在浏览器控制台上收到一个500内部服务器错误。
编辑:更新了代码并在更多的地方添加了console.logs以查看挂断的位置,我仍然不确定。下面是我单击login按钮时的日志记录顺序:
username
password
Password is correct
Bloodmorphed has been Serialized
Bloodmorphed has been deserialized
[object Object]
Bloodmorphed has been deserialized
[object Object]
编辑:所以看起来登录过程没有正常工作。我不知道为什么,我做什么都找不到问题。我已经研究了如何为MySQL设置passport的多个来源,虽然其中一些来源略有不同,但它们在重要的地方似乎都是相同的。我不知道这是为什么发生的,根据多个来源的工作登录,我这样做是正确的。