我在为我的应用程序添加护照的斗争仍在继续!我得到它,以便我不再得到我之前看到的疯狂巨大错误,但应用程序只是输出{}
。因此,在输入尽可能多的console.log()
语句后,我将其缩小到应用程序说它无法序列化用户对象这一事实,但据我所知{{1永远不会调用函数。
GitHub link with all files (other than node modules)
当然,我不是百分之百关于护照的工作方式,而且我是Node的新手,但是他有多年的其他语言经验,所以如果我需要,我可以手工做,但我会我更喜欢使用护照,因为它允许我最终使用Facebook和Google auth而不必重新制作轮子,可以这么说。
这是确切的错误:
护照策略jhechtf(密码)
用户找到了
密码很好
护照认证:jhechtf
Passport Authenticate Err:null
Passport身份验证信息:{message:'登录成功'}
AuthController错误:[错误:无法将用户序列化为会话]
现在我用Google搜索“几乎无法将用户序列化为会话passport.js”几乎每个可以想象的术语,但每次它似乎总是与passport.serializeUser()
而不是deserializeUser
有关。让我感到震惊的一件事是,serializeUser
来自console.log()
的{{1}}来电在任何时间都没有出现。
serializeUser()
var passport = require('passport');
module.exports = {
_config: {
actions: false,
shortcuts: false,
rest: false
},
login: function (req, res) {
passport.authenticate('local', function (err, user, info) {
if(user==false){
return res.status(403).send(info);
}
console.log("Passport Authenticate : ", user.username);
console.log("Passport Authenticate Err: ", err);
console.log("Passport Authenticate Info: ", info);
req.logIn(user, function (err) {
if (err) {
console.log("AuthController Error: " , err);
return res.status(401).send(err);
}
//Assume a correct login?
var red = req.session.redirectTo || '/';
//get the redirection value if it was set.
delete req.session.redirectTo;
//Now that we've got it, delete it.
res.redirect(red);
//redirect
});
})(req, res);
},
logout: function (req, res) {
req.logout();
res.redirect('/');
}
};
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
bcrypt = require('bcrypt-nodejs');
passport.serializeUser(function (user, done) {
console.log("Serialize User (passport.js) ", user);
// if(user==false || user == undefined){
// done({error:'user is not a user object, but is false or undefined'});
// }
// done(null, user.user_id);
done(null,user.user_id);
});
passport.deserializeUser(function (id, done) {
console.log("ID COMING IN AS: ", id);
Users.findOne({
user_id: id
}, function (err, user) {
return done(err, user);
});
});
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'user_password'
},
function (un, password, done) {
console.log("Passport Strategy ", un,password);
Users.findOne({
username: un
}, function (err, user) {
if (err) {
console.log("USER.FINDONE ERROR ", err);
return done(err,false,{message:'Can\'t find user'});
}
if (!user) {
return done(null, false, {
message: 'Incorrect Username <small>Are you sure you signed up?</small>'
});
}
console.log('user found');
if (bcrypt.compareSync(password, user.user_password)) {
console.log('passwords are good');
return done(null, user, {
message: 'Logged In Successfully'
});
} else {
return done(null, false, {
message: 'Invalid Password'
});
}
});
}
));
passportInit: require('passport').initialize(),
passportSession: require('passport').session(),
order: [
'startRequestTimer',
'cookieParser',
'session',
'myRequestLogger',
'passportInit',
'passportSession',
'bodyParser',
'handleBodyParserError',
'compress',
'methodOverride',
'poweredBy',
'router',
'www',
'favicon',
'404',
'500'
],
为你的时间和耐心而烦恼。
答案 0 :(得分:1)
问题是您有两套用于Passport身份验证的库:SELECT `designs`.`id`, (SELECT `stores`..
^^^^^// add comma
包(包括一些模型,控制器,路由等)和sails-auth
+ passport
包(只是普通的Passport库)。看起来你实际上根本没有使用passport-local
,但是它会挂钩你的应用程序并使自己的Passport配置。我想这就是为什么你的sails-auth
功能永远不会被激活&#34;。
从passport.serializeUser()
文件和sails-auth
目录中删除package.json
以修复您的设置。