version
|laravel|5.8|
|---|---|---|
|socialite|4.1|
現象
ローカルマシンで開発しているlaravel5.8をherokuにデプロイしたあとsocialiteを利用したソーシャル認証が動かなくなりました。
heroku logs
で確認するとcallbackされたリクエストが/login/github/callback?error=redirect_uri_mismatch
となっています。
解法
当たり前ですが、ローカルマシンではlocalhost
をcallbackに指定していましたが、別ホストなのでconfig/services.php
にてredirect
のURLも変更する必要があります。
client_id
とclient_secret
は割と作り変えたりするのですがリダイレクトパスはローカルで開発し続けてるとそのままのため、つい忘れてしまい変なハマり方をしてしまいました。
何故かマニュアルではredirect
もハードコーディングしてしまっていますが、コールバックURLも環境によって変化する変数に違いないため.env
経由に切り替えて、herokuへはheroku config:set GITHUB_REDIRET
で環境変数を設定するといった風にするのがベターかもしれません。
return [
// 省略
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
// 'redirect' => 'http://localhost/login/github/callback',
'redirect' => env('GITHUB_REDIRECT'),
],
]
# .env
GITHUB_REDIRCT=http://localhost/login/callback
$ heroku config:set GITHUB_REDIRECT=https://my-application.herokuapp.com/login/github/callback