我不太清楚如何在express/SQL中使用Passport的序列化用户功能。
以下是我的问题:
我的应用配置如下所示:
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);
});
我什么也没看到。怎么了?
回答您的两个问题:
>
您必须定义身份验证代码中的“用户”是什么。
它应该看起来像这样:
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/