Node.jsでTwitter認証を実装する方法




passport-twitter

Node.jsでTwitter認証を実装するにはpassportpassport-twitterを使うのが楽で早いです。

使い方は下記ソースコードで順に説明していきます。基本的にこれをまるまるコピーしてもらって、consummerKey等を変更してもらえればすぐに使えます。

ソースコードはgithubにあげてます。

ソースコードの説明

フレームワークはExpress.jsで、viewにはejsを使用しています。ES6で実装しているのでES6の導入は下記リンクを参考にしてください。

Node.js – babelでES6を導入する最短手順

import 'dotenv/config';
import config from 'config';
import session from 'express-session';
import passport from 'passport';
import express from 'express';
import ejs from 'ejs';
import TwitterStrategy from 'passport-twitter';

const app = express()

// セッションへの保存と読み出し ・・・・①
passport.serializeUser((user, callback) => {
    callback(null, user);
});

passport.deserializeUser((obj, callback) => {
    callback(null, obj);
});

// 認証の設定 ・・・・②
passport.use(new TwitterStrategy({
    consumerKey: config.get('twitter.consumerKey'),
    consumerSecret: config.get('twitter.consumerSecret'),
    callbackURL: config.get('twitter.callbackUrl')
},
// 認証後のアクション
(accessToken, refreshToken, profile, callback) => {
    process.nextTick(() => {
        console.log(profile); //必要に応じて変更
        return callback(null, profile);
    });
}));

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

// セッションの設定 ・・・・①
app.use(session({
    secret: 'reply-analyzer',
    resave: false,
    saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session()); // ・・・・①

// 指定したpathで認証 ・・・・③
app.get('/auth/twitter', passport.authenticate('twitter'));

// callback後の設定 ・・・・④
app.get('/auth/twitter/callback', passport.authenticate('twitter', {failureRedirect: '/login' }), (req, res) => {
    res.redirect('/'); 
});

app.get('/', function(req, res) {
    res.render('index', {title : 'タイトル'});
});

app.listen(8000)

①認証情報のセッションへの保存

Twitter認証後の認証情報はreq.session内に保存されます。しかし、上記実装ではメモリにし保持しないような実装になっているのでプロセスを再起動すると認証情報はなくなります。

再起動後も認証情報を維持する場合はconnect-memcachedconnect-redisに保存するようにしてください。

②認証情報の設定

認証情報はここからアプリを作成してconsummerKeyとconsummerSecretを取得してください。各値を直接ソースコード常に書くのはセキュリティ上良くないので環境変数に設定するようにしてください。

Node.jsでの環境変数の設定方法はこちらを参照して下さい → Node.jsでの環境変数の設定方法

③認証用のURLを設定と④コールバックURL

認証として使用したいパスは指定することができます。スタンダードなパス指定は/auth/twitterとなるので特にこだわりがなければそのまま使用するのがいいかと思います。

③の認証用URLにアクセスするとTwitter側で認証を行って、②のcallbackUrlで指定したパスにリダイレクトされるのでそのパスで④を実装しなければいけません。

④にアクセスがあった後はユーザーごとに適切なページにリダイレクトさせてあげればいいかと思います。

まとめ

下記4項目を押さえておけばTwitter認証は簡単に行えます。是非この情報を参考にして実装してみてください。

  • ①認証情報のセッションへの保存
  • ②認証情報の設定
  • ③認証用のURLを設定
  • ④コールバックURL

関連記事

おすすめ書籍

基礎から応用までサンプルコードを使って解説しており、Node.jsが初めての人でも読める技術書となっています。上級者向けにはExpressフレームワークを使った実用的な開発手法の解説もありこれからアプリケーションを開発する人の参考になると思います。現状では書き方が古くなっていますが、Node.jsの初心者から上級者で学ぶことの多い書籍です。

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です