Laravel SocialiteのTwitterで認証画面を強制的にだしてみる

by codechord. 0 Comments

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

表題の通りなんですけど、一度ログインした後、別のアカウントに切り替えようとログインしなおしても、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

参考リンク


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA