Car*_*los 4 node.js express passport.js
我在node.js中有一个服务器,使用快递和护照与passport-local策略.
我有数据库中的用户和通过护照我能够对它们进行身份验证,不幸的是当第二个请求来自同一客户端时该req.isAuthenticated()方法返回false.request(req.user = undefined)中也没有用户.
我也检查过,当我进行身份验证时,虽然我从用户那里回来了,但passport.authenticate('local'...我还是没有req.user填充.如果我尝试手动设置它,它就不会传播以用于后续请求.
我不明白我做错了什么,这是我的代码.
server.js
var express = require('express'),
compass = require('node-compass'),
routes = require('./server/routes')
http = require('http'),
path = require('path'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy,
Database = require('./server/repositories/database'),
Configuration = require('./server/config').Config,
crypto = require('crypto');
var app = express();
app.enable("jsonp callback");
passport.use(new LocalStrategy(
function(email, password, done) {
process.nextTick(function () {
var userService = new UserService();
userService.login(email, crypto.createHash('md5').update(password).digest("hex"), function(error, user) {
if (error) done(error, user);
else if (!user) return done(null, false, { message: 'wrong credentials'});
return done(null, user);
});
});
}
));
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(id, done) {
var userService = new UserService();
userService.findById(id, function(err, user) {
done(err, user);
});
});
app.configure(function(){
app.set('port', Configuration.Port);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(compass({
project: path.join(__dirname, 'app'),
sass: 'styles'
}));
app.use(express.session({ secret: 'keyboard cat' }));
app.use(function(err, req, res, next){
console.error(err.stack);
res.send(500, 'Something broke!');
});
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'app')));
});
routes.configure(app);
Database.open(function() {
app.listen(Configuration.Port, function() {
console.log("Express server listening on port " + Configuration.Port);
});
});
Run Code Online (Sandbox Code Playgroud)
routes.js
var Configuration = require('./config').Config;
var ApiResult = require('../model/apiResult').ApiResult;
var ApiErrorResult = require('../model/apiErrorResult').ApiErrorResult;
var ApiReturnCodes = require('../model/apiReturnCodes').ApiReturnCodes;
var passport = require('passport');
var usersController = require('./controllers/usersController');
exports.configure = function(app) {
function ensureAuthenticated(req, res, next) {
console.log(req.isAuthenticated());
if (req.isAuthenticated()) { return next(); }
else {res.send(new ApiErrorResult(ApiReturnCodes.NOT_LOGGED_IN, null));}
}
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err || !user) { console.log(info); res.send(new ApiErrorResult(ApiReturnCodes.ENTITY_NOT_FOUND, null)); }
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user
else res.send(new ApiResult(user));
})(req,res,next);
});
app.get('/anotherLink', ensureAuthenticated, function(req, res, next) {
res.json({Code:0});
});
}
Run Code Online (Sandbox Code Playgroud)
当我在/anotherLink经过身份验证后点击链接时,我得到res.isAuthenticated()了错误.
此外,当我看到被叫req.session后,ensureAuthenticated我得到:
{ cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
passport: {} }
Run Code Online (Sandbox Code Playgroud)
我缺少什么来保存用户通过身份验证的信息?在客户端,我使用Angular只使用没有参数的url进行简单的get.
如果我忘了在这里放东西告诉我,我会更新它.任何帮助将不胜感激.谢谢
所以我发现我的代码出了什么问题.
我的passport.deserializeUser方法使用了这个方法userService.findById
那称为存储库......就像这样:
userRepository.findUnique({"_id": id}, callback);
Run Code Online (Sandbox Code Playgroud)
因为正确的通话id所产生的MongoDB需要是:
userRepository.findUnique({"_id": new ObjectID(id)}, callback);
Run Code Online (Sandbox Code Playgroud)
我希望这可以节省一些时间给下一个有同样问题的人.
这一细节,该代码应该很好地工作的每个人都想要使用LocalStrategy的Passport框架.
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |