最好的方式来设置locomotivejs护照twitter?

我正在尝试在我的机车项目中configurationpassport-twitter。

问题是,点击/ auth / twitterurl后没有任何反应。

编辑:我打控制器,但叽叽喳喳似乎不被调用。

我所做的是在routes.js上设置一个匹配/ auth / twitter,并将其映射到一个auth_controller.js

类似下面的代码:

  • routes.js

    this.match('auth/twitter/', 'auth#twitter'); this.match('auth/twitter/callback/', 'auth#callback'); 
  • auth_controller.js

      var locomotive = require('locomotive') , Controller = locomotive.Controller , passport = require('passport'); var AuthController = new Controller(); AuthController.twitter = function() { console.log('[##] AuthController.twitter [##]'); passport.authenticate('twitter'), function(req, res) {}; } AuthController.callback = function() { console.log('[##] AuthController.callback [##]'); passport.authenticate('twitter', { failureRedirect: '/show' }), function(req, res) { res.redirect('/list'); }; } module.exports = AuthController; 

我真的不知道如果这是正确的方式来使用火车头,任何帮助将非常感激。

干杯,法比奥

护照需要先configuration。 如何做到这一点的例子可以在这里find。 在LocomotiveJS的情况下,放置该configuration的显而易见的地方将是一个初始化程序:

 // config/initializers/10_passport_twitter.js <-- you can pick filename yourself module.exports = function(done) { // At least the following calls are needed: passport.use(new TwitterStrategy(...)); passport.serializeUser(...); passport.deserializeUser(...); }; 

接下来,configuration会话并初始化Passport:

 // config/environments/all.js module.exports = { ... // Enable session support. this.use(connect.cookieParser()); this.use(connect.session({ secret: YOUR_SECRET })); // Alternative for the previous line: use express.cookieSession() to enable client-side sessions /* this.use(express.cookieSession({ secret : YOUR_SECRET, cookie : { maxAge : 3600 * 6 * 1000 // expiry in ms (6 hours) } })); */ // Initialize Passport. this.use(passport.initialize()); this.use(passport.session()); ... }; 

接下来,configuration路由:

 // config/routes.js this.match('auth/twitter/', 'auth#twitter'); this.match('auth/twitter/callback/', 'auth#callback'); 

因为passport.authenticate是中间件,所以在控制器中使用一个before钩子会更容易:

 // app/controllers/auth_controller.js ... AuthController.twitter = function() { // does nothing, only a placeholder for the following hook. }; AuthController.before('twitter', passport.authenticate('twitter')); AuthController.callback = function() { // This will only be called when authentication succeeded. this.redirect('/list'); } AuthController.before('callback', passport.authenticate('twitter', { failureRedirect: '/auth/twitter' })}; 

免责声明:我没有testing上面的代码,我基于我自己的代码,我最近在一个项目中使用,并使用passport-local而不是passport-twitter 。 然而,除了passport-local不需要的callback-URL之外,基本上是非常相似的。