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 没有响应的主要内容,如果未能解决你的问题,请参考以下文章

firebase暂时发送“没有用户记录”?

passport.js deserializeUser 如何解密散列的会话数据?

Facebook回调函数的CORS错误

req.user 使用 passport.js 1-2 分钟后清除

快速会话和 Cookie

节点猫鼬总是在 findOne 上返回错误