提问者:小点点

护照的序列化用户没有响应


我不太清楚如何在express/SQL中使用Passport的序列化用户功能。

以下是我的问题:

  1. passport.serializeUser如何知道“用户”是什么?我应该在哪里指定它?
  2. 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/