1

機関車プロジェクトでpassport-twitterを設定しようとしています。

問題は、/ auth /twitterurlを押しても何も起こらないことです。

編集:コントローラーを押しましたが、Twitterが呼び出されていないようです。

私がしたことは、routes.jsで/ auth / twitterに一致を設定し、これをauth_controller.jsにマップすることでした。

以下のコードのようなもの:

  • ルート.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;
    

それが機関車でそれを使用する正しい方法であるかどうか私は本当に知りません、どんな助けでも非常にありがたいです。

乾杯、ファビオ

4

1 に答える 1

6

最初にパスポートを設定する必要があります。これを行う方法の例は、ここにあります。LocomotiveJSの場合、その構成を配置する明白な場所は初期化子です。

// 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(...);
};

次に、セッションを構成し、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());
  ...
};

次に、ルートを構成します。

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

passport-local免責事項:上記のコードはテストしていません。プロジェクトで最近使用した、の代わりに使用する独自のコードに基づいていますpassport-twitter。ただし、の必要がないcallback-URLを除けば、基本はほとんど同じですpassport-local

于 2013-02-19T09:53:13.067 に答える