TwitterのOAuth認証時にログインフォームを経由させる方法

TwitterでOAuth認証する時、使用中のブラウザで既にTwitterにログイン済みの場合は、自動的にOAuth認証もログイン中のアカウントで行われます。

しかし、認証URLに対してforce_loginというパラメータを渡せば、ログイン中でも強制的に認証ログインフォームに進むことができます。
この時、ブラウザ上のログインセッションは破棄されるので、そのブラウザではTwitterからはログアウトした状態になります。

通常の認証URL:https://api.twitter.com/oauth/authorize
強制ログインフォーム用 認証URL:https://api.twitter.com/oauth/authorize?force_login=true

Twitter認証のたびにID・パスワードを入力させる理由がある場合や、連携サイト上の認証アカウント切り替えを簡易にしたい場合の裏口用にこちらのパラメータを付与したURLも用意しておくと良いかもしれません。

ちなみに、iconDecotterではtwitteroauthを使用していますが、このパラメータを認証URLに加えようとした場合、ライブラリに手を入れずとも、getAuthorizeURLメソッドで取得したURLの末尾に“&force_login=true”を加えるのみでOKです。

twitteroauthのサンプルで言うとredirect.phpに手を加えます。

18
19
20
21
22
23
24
25
26
27
28
/* If last connection failed don't display authorization link. */
switch ($connection->http_code) {
  case 200:
    /* Build authorize URL and redirect user to Twitter. */
    $url = $connection->getAuthorizeURL($token);
    header('Location: ' . $url);
    break;
  default:
    /* Show notification if something went wrong. */
    echo 'Could not connect to Twitter. Refresh the page or try again later.';
}

23行目を下記のようにします。
$urlには元々アクセストークンのパラメータが含まれていますので、”&force_login=true”でOKです。

23
header('Location: ' . $url . "&force_login=true");

これで、認証時は常にログインフォームでID・パスワードを求められるようになります。

ただし、常にそうしてしまうと不便ということもあるかと思いますので、
redirect.phpに対するGETパラメータとして取得するようにした方が良いかもしれません。

1
2
3
4
5
6
7
8
$force_login = "";
if(!empty($_GET['force_login'])){
  $force_login = "&force_login=true";
}
/* 省略 */
header('Location: ' . $url . $force_login);

こうすると、状況次第で通常遷移させる redierct.php か、ログインを経由させる redirect.php?force_login=true の使い分けができます。

コメント

タイトルとURLをコピーしました