Passport的serializeUser没有响应

时间:2014-11-19 00:54:22

标签: node.js express passport.js passport-twitter

我无法弄清楚如何在express / SQL中使用Passport的serializeUser函数。

以下是我的问题:

  1. passport.serializeUser如何知道"用户"是什么?我应该在哪里指定它?
  2. passport.serializeUser如何知道哪个请求对象应该与cookie绑定?
  3. 我的应用配置如下所示:

    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 个答案:

答案 0 :(得分:0)

回答你的两个问题:

  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);
     });
    
  2. 通过一些请求对象访问身份验证路由,这是代码:

    done(null,user);
    

    知道你的req对象。根据我的理解,就是这样。

  3. 这方面的一个很好的来源是:http://toon.io/understanding-passportjs-authentication-flow/