我正在使用passport.js + passport-facebook-token来保护我的API构建与Strongloop的Loopback Framework。为什么每次请求都执行passport.serializeUser?
为什么护照在成功反序列化后再次序列化反序列化的用户?每次请求都会调用passport.authenticate方法!我究竟做错了什么?
这里是节点的日志:
deserializeUser, id: XXXXXXXXXXXXXXXX
User found.
serializeUser, id: XXXXXXXXXXXXXXXX
GET /api/events?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 304 182ms
这里是js代码:
passport.use(new FacebookTokenStrategy({
clientID: XXXXXXXXXXXXXXXX,
clientSecret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
},
function(accessToken, refreshToken, profile, done) {
//check user table for anyone with a facebook ID of profile.id
User.findOne({
'facebookId': profile.id
}, function(err, user) {
if (err) {
return done(err);
}
if (user) {
console.log("User found.");
return done(err, user);
} else {
console.log("User not found.");
User.create({
email: profile.emails[0].value,
facebookId: profile.id,
password: 'secret'
}, function(err, user) {
console.log(user.id);
console.log(user.email);
console.log(user.facebookId);
console.log("User created");
return done(err, user);
});
}
});
}));
passport.serializeUser(function(user, done) {
console.log('serializeUser, id: ' + user.facebookId);
done(null, user.facebookId);
});
passport.deserializeUser(function(id, done) {
console.log('deserializeUser, id: ' + id);
User.findOne({
'facebookId': id
}, function(err, user) {
if (!err) {
done(null, user);
} else {
done(err, user);
}
});
});
你可以在哪里定义处理认证的中间件的代码? 它应该看起来像'passport.authenticate(“facebook”,function ....)'。 如果你做了'app.get(“/ *”,passport.authenticate())'',它就像预期的那样工作。 –
这是为此添加的唯一loc:app.use(passport.authenticate('facebook-token')); –
嗯,好吧,我明白了。但我的理解是,它应该被添加为中间件,因为它可以保护我的API免受未经授权的访问......哪里可以添加此行?或者你有什么建议? –