0

我不太清楚如何在 express/SQL 中使用 Passport 的 serializeUser 函数。

以下是我的问题:

  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);
});

我从来没有看到任何东西。怎么了?

4

1 回答 1

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 对象。据我了解,是这样的。

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

于 2014-11-20T00:04:40.380 回答