Twitter アカウントでログインするアカウント連携機能を作る

環境

  • PHP8
  • MySQL

使用したライブラリ

簡単な手順

事前準備

  • Twitter アカウントを用意する。(Eメール認証、電話番号認証あり)
  • Developer Portal に登録する。
  • プロジェクトを作る
  • API Key と API Key Secret をコピーしておく。
  • アプリ認証画面から戻ってくるための Callback URL を設定する。
    • 開発用と本番用で分けるのであれば「 + Add App 」で増やして管理すればいいと思う。
  • Developer Portal にてアクセスレベルを Essential から Elevated に上げる。

開発過程

  • POST oauth/request_token にて oauth_token を取得する。
  • oauth_token を使ってアプリケーション認証画面を表示させる。 URL は GET oauth/authenticate の Example request を参照
  • 認証画面から Callback URL で指定した URL に戻る。
    • 認証が成功していればクエリに oauth_token と oauth_verifier が付与されている
  • oauth_token と oauth_verifier を使って POST oauth/access_token にアクセスし、 oauth_token と oauth_token_secret を取得する。
  • API Key, API Secret Key, oauth_token, oauth_token_secret の4つを使って Twitter API を使用する。

サンプルコード抜粋

Twitter OAuth API を利用する

<?php
use Abraham\TwitterOAuth\TwitterOAuth;

// コピーしておいた API Key と API Key Secret を用意する
// $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$connection = new TwitterOAuth('API key', 'API Key Secret', '', '');

// リクエストトークン取得
$requestToken = (object) $connection->oauth('oauth/request_token');
var_dump($requestToken);
?>

認証画面の URL

<?php
header("https://api.twitter.com/oauth/authenticate?oauth_token={$requestToken->oauth_token}");
exit;
?>

Callback URL で戻ってきた後

  • $queries にクエリパラメータが入っている想定
  • oauth_token と oauth_token_secret を取得する。
<?php
$oauthToken = isset($queries['oauth_token']) ? $queries['oauth_token'] : '';
$oauthVerifier = isset($queries['oauth_verifier']) ? $queries['oauth_verifier'] : '';

// アクセストークン取得
$accessToken = (object) $connection->oauth('oauth/access_token', [
	'oauth_token' => $oauthToken,
	'oauth_verifier' => $oauthVerifier,
]);
var_dump($accessToken);
?>

Twitter API を利用して自分の Twitter アカウント情報を取得する

<?php
use Abraham\TwitterOAuth\TwitterOAuth;

// $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$connection = new TwitterOAuth('API key', 'API Key Secret', $accessToken->oauth_token, $accessToken->oauth_token_secret);
$response = $connection->get('account/verify_credentials');
var_dump($response);
?>

最後に

後は、 Twitter アカウント情報と自分のサービスのアカウント情報を紐づけるテーブルを作成すれば終わり。
Twitter のユーザー ID で紐づける時は text か bigint あたりでカラム作らないと数字がでかすぎて int じゃ収まらないので注意。