Background
我有一个简单的应用程序,它的CRUD功能经过了postman的全面测试.我已经有一段时间没有try 登录了.我已经阅读并try 了以下内容
- passport docs
- toon io's blog about login
- Express session
- Scotch io, node auth made easy
- 再加上一大堆其他轻松的阅读material (很多问题)
但我只能注册和登录一个用户,不能持久登录会话.
My App
Here是完整github回购协议的链接(如果您正在寻找最新的更改,请查看开发分支)
My Understanding of Auth/Login
以下是我对用户登录的理解,包括我的项目中的代码示例、postman 结果的屏幕截图以及控制台日志(log).
Passport 设置
我有以下授权.js文件,配置passport
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
module.exports = function(app, user){
app.use(passport.initialize());
app.use(passport.session());
// passport config
passport.use(new LocalStrategy(user.authenticate()));
passport.serializeUser(function(user, done) {
console.log('serializing user: ');
console.log(user);
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
user.findById(id, function(err, user) {
console.log('no im not serial');
done(err, user);
});
});
};
这会在服务器文件中被调用,比如
//code before
var user = require('./models/user.js');
var auth = require('./modules/auth.js')(app, user);
// code after
登录路由
在我的路径中,我的登录路径如下
router.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) {
return next(err);
}
if (!user) {
return res.status(401).json({
err: info
});
}
req.logIn(user, function(err) {
if (err) {
return res.status(500).json({
err: 'Could not log in user'
});
}
res.status(200).json({
status: 'Login successful!'
});
});
})(req, res, next);
});
这条works号公路经过postman 的测试.我输入详细信息"joe"和"pass",并得到以下响应.
当点击该路径时,我们还可以在控制台中看到用户被序列化.
So what next?
这就是我迷路的地方.我有几个问题.
- 用户现在是否正在我的服务器上进行会话?
- 我应该把
req.session.passport.user
美元寄还给客户吗? - 我是否需要future 所有请求的会话ID?
Testing the Session
我有一个测试会话的第二个路由设置,如下所示
router.get('/checkauth', passport.authenticate('local'), function(req, res){
res.status(200).json({
status: 'Login successful!'
});
});
第passport.authenticate('local')
部分(我认为)是为了测试用户会话是否存在,然后才允许访问路由,但当我运行此部分时,即使在登录之后,也从未得到200响应.
该路由是否希望在头中传递req.session.passport.user
,或者作为需要auth的http请求的数据参数?
如果我错过了什么或者理解错了什么,请告诉我,任何意见都将不胜感激.谢谢大家.