LoginSignup
0
0

More than 5 years have passed since last update.

compoundでTwitter認証

Posted at

Node.jsのcompoundでTwitter認証しようと思ったら想像以上に苦戦したのでメモ

パッケージインストール

$ npm install compound-passport passport passport-twitter

config/passport.ymlを作成

development:
  baseURL: 'http://localhost:3000/'
  twitter:
    apiKey: TWITTER_CONSUMER_KEY
    secret: TWITTER_CONSUMER_SECRET
production:
  baseURL: 'http://example.com:3000/'
  twitter:
    apiKey: TWITTER_CONSUMER_KEY
    secret: TWITTER_CONSUMER_SECRET

config/autoload.jsを編集

'compound-passport'を追加

var defaultModules = [
    'jugglingdb',
    'co-assets-compiler',
    'compound-passport'
], developmentModules = [];

Userモデルにメソッド追加

モデルのプロパティは適宜読み替えてください

User.findOrCreate = function (data, done) {
   /* TWITTER */
   if (data.twitterId) {
       var twitterdata = data.profile._json;
       User.all({
           where: {
               uid: twitterdata.id
           }, limit: 1
       }, function (err, user) {
           if (user[0]){
               user[0].name = twitterdata.name;
               user[0].screenname = twitterdata.screen_name;
               user[0].icon = twitterdata.profile_image_url;
               user[0].save();
               done(err, user[0]);
           }
           else{
               console.log(twitterdata);

               console.log("create a new user");
               User.create({
                   uid: twitterdata.id,
                   name: twitterdata.name,
                   screenname: twitterdata.screen_name,
                   icon: twitterdata.profile_image_url
               }, done);
           }
       });
    }
};

application_controller.jsに追記

this.userに格納しておくとviewから直接アクセスできるようになる

before(function requireManager() {
    User.find(session.passport.user, function (err, user) {
        console.log(user);
        if (user) {
            req.user = user;
        }
        this.user = req.user;
        next();
    });
});

ログアウト用のコントローラー作成

コントローラー内で以下のメソッドを呼べばOK

req.logout();
res.redirect('/');

おわりに

/auth/twitterにアクセスすることでTwitter認証できます。
このcompound-passportを使用すると、ライブラリを弄らないとaccesstokenは取得できないようですね。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0