はじめに
Laravelで作成したサイトにTwitter(現在はX)のログイン連携機能を追加した際、認証周りでエラーに悩まされました。
この記事では、同じようにTwitterログインを実装しようとしている方に向けて、遭遇したエラーの原因とその解決方法を詳しく解説します。
やりたいこと
X(旧Twitter)から提供されている認証APIを利用した、ログイン機能の実装をしたい。
環境
- PHP Version: 8.2.12
- Laravel Framework: 11.30.0
準備
まずはTwitterの開発者アカウントを作成し、以下の情報を取得します。
- Consumer API Key
- Consumer API Secret
- レスポンスURLの登録
参考記事
実装
次に以下の記事を参考に、laravelの設定を進めます。
参考記事
上記の記事に従い、実装を進めました。(Laravel 5.5以上では、config/app.php の設定が不要ですので、そこは省略しています)。
ハマったポイント
実装中に最も悩んだのは、config/services.php の設定部分でした。以下のように設定していたのですが、実行すると次のエラーが発生しました。
'twitter' => [
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('TWITTER_REDIRECT_URI'),
],
発生したエラー
Received HTTP status code [401] with message '{"errors":[{"code":32,"message":"Could not authenticate you."}]}'
このエラーメッセージには具体的な理由が記載されていなかったため、原因の特定に苦労しました。
原因
2024年から、Twitter(X)はAPIの仕様を変更し、認証に関するAPIも変更されました。
新しいAPIでは、OAuth 2.0 を使用する必要があるため、それに合わせた設定が必要でした。
解決策
公式ドキュメントを参考にしたところ、OAuth 2.0を利用するためには、config/services.php
の設定を変更する必要があることがわかりました。
デフォルトではOAuth 1.0が指定されており、これをOAuth 2.0に変更する必要があります。
設定変更 (config/services.php
)
変更前の設定
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/login/twitter/callback',
],
変更後の設定
'client_id' => env('TWITTER_CLIENT_ID'),
'client_secret' => env('TWITTER_CLIENT_SECRET'),
'redirect' => env('APP_URL') . '/login/twitter/callback',
'oauth' => 2, // OAuth 2.0を使用する設定を追加
],
この変更を加えることで、認証エラーが解消され、認証が正常に成功しました。
まとめ
2024年からTwitterはX APIに移行し、認証に関するAPIが変更されたため、config/services.phpの変更が必要でした。
ポストの投稿やリポストについては、引き続きOAuth 1.0の利用が必要とのことですので、その場合は、OAuth 2.0の設定は不要かと思われますので、認証にのみ利用する方がハマるのかなと思われます。
大きな変更があった場合には公式のドキュメントを参考にする必要があることを学びました。
最後に
はじめまして、スガイと申します。初めてQiitaに投稿します。
これまでは、ほとんどの記事を読む側としてお世話になっていましたが、記事を読んで得た情報で何度も助けられてきたので、今度は自分も誰かの役に立ちたいと思い、こうして投稿することにしました。
Twitter(X)のログイン機能をLaravelに実装した際、ちょっとしたハマりどころがあったので、その経験を共有できたらと思い、記事を記載しました。少しでも誰かの役に立てれば嬉しいです。
今後も、気づいたことや学んだことがあれば、どんどん記事を投稿していきたいと思います!
引き続きよろしくお願いします。