【要対応】Socialite で Twitter API v2 へ切り替える

こんにちはー!むちょこです。

みなさんはもう Twitter API v2 への切り替えは終わりましたか?

3月30日に「今後 30 日間で、Standard (v1.1)、Essential (v2)、Elevated (v2)、Premium などの現在のアクセス レベルが廃止される」と公式からお知らせが出されたことで慌てて対応中の方もいらっしゃるのではないでしょうか(私もそのうちの一人です……)。

今日は Laravel の Socialite を OAuth 1.0a + Twitter API v1.1 でご利用の方向けに、OAuth 2.0 + Twitter API v2 へ切り替える方法をご紹介します。

ご注意

Socialite においては、 OAuth 1.0a + Twitter API v2 という選択肢はないようです。そのため、残念ながら Socialite を選ぶことができないシステムもあるかと思います。

まずは次の2つのリスクをご確認ください。

OAuth 2.0 + Twitter API v2 に切り替えるリスク

Twitter の OAuth 2.0 では Email 情報を取得できません

しかしながら、どうも Socialite で Twitter API v2 を使えるのは OAuth 2.0 を選択したときだけのようです。

OAuth 1.0a + Twitter API v1.1 を使い続けるリスク

Twitter API v1.1 は廃止が決定しています。 OAuth 1.0a はこれからも使い続けられるようですが、 Socialite が OAuth 1.0 の場合に使用しているパッケージは Twitter API v1.1 にアクセスしています。

そのため、 Socialite で OAuth 1.0a を使い続けることはできません

上記を踏まえて OAuth 2.0 + Twitter API v2 に切り替えることを決めた方は、下記の手順で切り替え作業に進んでください 🙂

Socialite のバージョンアップ

Twitter API v2 のエンドポイントにアクセスしているソースは、 Socialite 5.x から見つかりました。

https://github.com/laravel/socialite/blob/5.x/src/Two/TwitterProvider.php

Socialite 4.x 以下には存在しないため、4.x 以下をご利用の方はバージョンアップの必要がありそうです。

バージョン確認方法

composer.json が存在するディレクトリ内で composer で管理しているパッケージのバージョン確認コマンドを実行します。

コマンド
$ composer show -i | grep laravel/socialite
laravel/socialite                       v4.4.1

バージョンアップ手順

1. 要件確認

公式が出しているアップグレードガイドに要求される環境情報が書いてありますので、まずはそれを満たしているか確認します。

4.x から 5.0 にアップグレードするために必要な環境情報はこちらです。

  • PHP 7.2 以上
  • Laravel 6.0 以上

また、それぞれのバージョンを確認するコマンドは次のとおりです。

確認コマンド
PHP バージョン確認
$ php -v
Laravel バージョン確認
$ php artisan --version

2. バージョンアップ

必要な環境が準備できたら、composer のバージョンアップコマンドで Socialite のバージョンを上げていきます。

まずは composer.json で指定されているバージョンを確認して、 5.x まで上げられるように変更しましょう。

composer.json
"laravel/socialite": "^5.0",

次に –dry-run オプションをつけて update コマンドで実行される内容を確認します。

コマンド
$ composer update --dry-run laravel/socialite

依存関係などに問題がなければ、 –dry-run オプションを外して update コマンドを実行してください。

コマンド
$ composer update laravel/socialite

念のため Socialite のバージョンを確認して、 5.x 系のバージョンになっていれば OK です!

コマンド
$ composer show -i | grep laravel/socialite
laravel/socialite                       v5.5.2             Laravel wrapper around OAuth 1 & OAuth 2 libraries.

OAuth 2.0 用の Client ID と Client Secret を取得

Twitter では、 OAuth 1.0 用と OAuth 2.0 用でそれぞれ別のキーが用意されています。

OAuth 2.0 用のキーをお持ちでない方は、作成から行ってください。

1. Twitter アプリを v2 対応に移行する

まずは Developer Potal にログインします。Projects & Apps の「 V2 ACCESS 」がついているプランの中に対象アプリが含まれていることを確認してください。

もし「 V1.1 ACCESS 」しかない場合は、先にアプリの移行が必要です。 Twitter の移行ガイドを参考に移行を進めてください。

2. OAuth 2.0 用の設定を登録

アプリの歯車マーク > Setting タブ > User authentication settings 「Edit」でユーザ認証の設定ページに進みます。

「 Type of App 」項目が OAuth 2.0 用の設定です。これに答えて、「 Save 」ボタンを押してください。

3. OAuth 2.0 用の Client ID と Client Secret を取得する

「 Type of App 」項目を初めて保存すると、 Client ID と Client Secret が表示されます。コピーしてどこかに保存しておいてください。特に Client Secret は後から表示できませんので、確実に保存するようにしましょう。

Laravel の設定を OAuth 2.0 用に変更

最後に Laravel の設定を変えて、 OAuth 2.0 を使用するようにします。

.env

取得した Client ID と Client Secret を Laravel の環境設定に反映させます。既に OAuth 1.0 用のものが設定されていると思いますので、上書きしてください。

.env
TWITTER_CLIENT_ID={ OAuth 2.0 Client ID }
TWITTER_CLIENT_SECRET={ OAuth 2.0 Client Secret }

config/services.php

サービス設定のほうでも、 OAuth 2.0 を使うことを明示してあげる必要があります。

twitter 配列の中に oauth キーを加えて、値を 2 に設定してください。

config/services.php
'twitter' => [
    'client_id'     => env('TWITTER_CLIENT_ID'),
    'client_secret' => env('TWITTER_CLIENT_SECRET'),
    'redirect'      => env('TWITTER_URL'),
    'oauth'         => 2
],

その他

先述のとおり、 OAuth 2.0 ではメールアドレスの取得ができなくなります。

もしメールアドレスを取得している箇所がある場合は、取得できなくても問題がないようコードを変更してください。

完成

これで OAuth2.0 + Twitter API v2 への切り替え完了です!