Laravel SocialiteのTwitterで認証画面を強制的にだしてみる
.表題の通りなんですけど、一度ログインした後、別のアカウントに切り替えようとログインしなおしても、Twitter側にセッションが残っているかなんかで、ログイン画面が出ずにcallbackしてしまう、もしくは今ログイン中のアカウントと紐づくみたい挙動になる。私は毎回ログイン画面出したいんだ!とそういったケース。
なお、Twitterドキュメントを見る限り`force_login=true`してあげれば済む話なんだけど、LaravelのSocialiteでどうするの?という話と、ちょっとおまけ。
Laracastsのフォーラムにも、同様の質問があった。force_loginオプションを、どうやったら付けれるの!?と。
結論としては、socialiteprovider/twitter:v3.0.0ではその実装がなかったから、自分でPRを送ってマージしてもらえたので、v3.0.1からは次のようにするとできるようになる。
Socialite::driver('twitter')->with(['fource_url' => true ])->redirect();
ログイン画面を日本語にしてみる
ログイン画面を日本語にしたい場合は`lang=ja`を渡せばよので、同様に、次のようにすれば良い。
Socialite::driver('twitter')->with(['lang' => 'ja'])->redirect();
ちなみに、Socialiteは プロバイダが、OAuth2の場合は、リクエストにクエリを渡すためのメソッド「with([‘prop’=>’value’])」が考慮されているけども、OAuth1の場合は、with()が考慮されていない実装になっている。TwitterはOauth1なので、使えなかったwith()を、使えるようにしたというもの。
認証プロセスのほとんどはOAuth2だけど、稀にOAuth1がある。Twitterによらずとも、OAuth1のプロバイダの場合は、このPRのように修正すればwith()でも動くはず。継承元を修正しようかと思ったけど、ちょっと不安だったので、TwitterのみPRを送った。
困った人の救いになれば幸いです。
PR
SNSをまとめる便利なアプリ socialis.jp
参考リンク
- https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate
- SocialiteProviders/Twitter
- SocialiteProviders/Providers
- Packagist: socialiteproviders/twitter
- Github.com SocialiteProviders/Providers !162
- Laracasts [Is it possible to use force_login for Twitter in Laravel Socialite?]