【Laravel8】 SocialiteのTwitter認証で401エラーになった時の解決方法

LaravelのSocialiteを使ってTwitter認証を実装していたら、401エラーが出てハマりました。

情報が少なく、解決に時間がかかりましたが、なんとか解決しました。

同じように困っている人がいると思うので、解決方法を書き留めておきます。

エラー内容

Received HTTP status code [401] with message "{"errors":[{"code":32,"message":"Could not authenticate you."}]}" when getting temporary credentials.

このエラーは、基本的に認証情報が間違っている時に出るようです。

解決策1. 時間をおいて試してみる

初めてTwitter認証を使った時はエラーが出たのですが、時間をおいて試してみたところ使えるようになりました。

おそらくTwitter Developerに登録したばかりだと使えるようになるまで少し時間がかかるようです。

解決策2. 認証情報に間違いがないか確認

Socialiteを使うとき、最低でも.envファイルに以下の情報が必要になります。

TWITTER_CLIENT_ID=【API Key】
TWITTER_CLIENT_SECRET=【API Secret Key】
CALLBACK_URL=【リダイレクト先のURL】

これが間違っていると、401エラーが発生します。

間違っていないと思い込んでいて、実は間違っている可能性もゼロではありません。

認証情報はTwitter Developer Portalで再表示することができないので、不安であれば再発行してみてください。

解決策3. キャッシュをクリア

私はこれで解決しなかったのですが、以下の方法でキャッシュをクリアしたらいけたという情報もありました。

$ php artisan cache:clear
$ php artisan config:clear
$ php artisan route:clear

解決策4. league/oauth1-clientのバージョンを確認

私はこれで解決しました。

Socialiteでは、league/oauth1-clientパッケージが使用されるのですが、バージョンが1.9以上だと動きませんでした。

league/oauth1-clientの1.8.2をインストールすることで、エラーが発生しなくなりました。

401エラーがどうしても治らないのであれば、こちらをお試しください。

なお、league/oauth1-clientの1.8.2はPHP8では動かないので、PHP7.4以下を使うように指定する必要があります。

composer.jsonを以下のように修正・追加します。

"require": {
        "php": "^7.4",
        〜省略〜
        "league/oauth1-client": "1.8.*",
},

これで、一旦vendorフォルダとcomposer.lock.jsonを削除し、composer installをしてインストールし直したら無事動きました。

まとめ

おそらく私と同じエラーに遭遇している人が多数いると思うので、記事にしておきました。

ぜひ参考にしてください。