Passport 的 serializeUser 没有响应
Posted
技术标签:
【中文标题】Passport 的 serializeUser 没有响应【英文标题】:Passport's serializeUser doesn't respond 【发布时间】:2015-01-16 09:28:56 【问题描述】:我不太明白如何在 express/SQL 中使用 Passport 的 serializeUser 函数。
这是我的问题:
-
passport.serializeUser 如何知道“用户”是什么?我应该在哪里指定?
passport.serializeUser 如何知道哪个请求对象应该与 cookie 绑定?
我的应用配置如下所示:
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);
);
我什么都没看到。怎么了?
【问题讨论】:
【参考方案1】:回答你的两个问题:
您必须在身份验证代码中定义什么是“用户”。
应该是这样的:
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/
【讨论】:
以上是关于Passport 的 serializeUser 没有响应的主要内容,如果未能解决你的问题,请参考以下文章
passport.js deserializeUser 如何解密散列的会话数据?