我无法弄清楚如何在express / SQL中使用Passport的serializeUser函数。
以下是我的问题:
我的应用配置如下所示:
var passport = require('passport');
app.use(session({ secret: 'Secret',
saveUninitialized: true,
resave: true}));
app.use(passport.initialize());
app.use(passport.session());
我还在twitter_auth.js中向应用程序公开以下代码:
// twitter authentication and login
app.get('/auth/twitter', passport.authenticate('twitter'));
// handle callback after twitter has authenticated user
app.get('/auth/twitter/callback',passport.authenticate('twitter',{
successRedirect: '/',
failureRedirect: '/'
}));
// used to serialize user
passport.serializeUser(function(user,done){
done(null,user);
});
// used to deserialize the user
passport.deserializeUser(function(User_ID,done){
connection.query('SELECT * from UsersTable where User_ID = '+User_ID, function(err,rows){
done(err,rows[0]);
});
});
当我尝试发现它时:
// used to serialize user
passport.serializeUser(function(user,done){
console.log('spotted here!');
done(null,user);
});
我从来没有看到任何东西。怎么了?
答案 0 :(得分:0)
回答你的两个问题:
您必须在身份验证代码中定义“用户”。
它应该是这样的:
passport.use(new TwitterStrategy({
consumerKey:*******,
consumerSecret:******,
callbackURL:'/auth/twitter/callback'
},
function(token, tokenSecret, profile,done){
var user = db.call(retrieve a user) ; //whatever you want it to be
done(null,user);
});
通过一些请求对象访问身份验证路由,这是代码:
done(null,user);
知道你的req对象。根据我的理解,就是这样。
这方面的一个很好的来源是:http://toon.io/understanding-passportjs-authentication-flow/