4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel Socialiteで認証後のリダイレクト先を動的に設定する

Last updated at Posted at 2018-02-07

はじめに

リダイレクト先の設定はconfig/services.phpに書くことで設定は可能ですが、
マルチテナントなシステムで、テナントごとに戻り先が替わる場合には設定ファイルの定義だけでは定義しきれない。
これの解決方法を残しておきます。

コードはTwitterで書きます。

どうやるの?

  • customCreatorsでインスタンスを作るようにする。

これだけ。
中身は、

\Laravel\Socialite\SocialiteManager::createTwitterDriver()

そのまま。


public function redirectToProvider($tenant)
{
    $url = route('hogehoge.twitter.callback', [$tenant]);

    $provider = Socialite::extend('twitter', function ($app) use ($url) {
        $config = $app['config']['services.twitter'];
        $config['redirect'] = $url;

        return new TwitterProvider(
            $app['request'], new TwitterServer(Socialite::formatConfig($config))
        );
    })->driver('twitter');
}

テナントごとに各キー値を書き換えたければ、他のも書き換えればOK。

他の方法は?

Socialite::driver('twitter')で取れるTwitterProviderの$serverプロパティを取るためにズルする。
$serverプロパティを取れれば、getClientCredentials()->setCallbackUri($new_uri)で書き換え可能。

終わりに

本当はredirect先だけ書き換えれれば良かったので、インスタンス毎作る必要はないけど、
設計思想がconfigの設定で1セットって考え方だと思うので、こうなるのかなーと割り切ってコレで実装しました。
他のイイやり方があったら是非教えてください。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?