5
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]OAuthによるログイン時に前画面からパラメータを引き継ぐ方法

Posted at

laravel-v6.18.40 socialite-v5.0.1

はじめに

OAuthによるログインの実装は、一度外部サービスへリダイレクトを行って、外部サービスから自サービスのコールバックエンドポイントにリダイレクトを受けるという流れになります。
ログイン時には、「どの画面からログインを試みたのか?」 「どういう登録導線からログインされたのか?」 といったログイン処理前の情報を受け取りたいニーズがある場合があります。

このとき、ログイン画面からコールバックエンドポイントに情報を伝達したい場合どうしたらいいかという話です。
ログインに限らず、登録のケースでも同じようにできます。

セッションを利用する

HTTPはステートレスなので、リクエストをまたがって情報を保持するには以下のいずれか対応をする必要があります。

  1. POSTパラメータまたはGETパラメータを次ページに引回す
  2. セッションにデータを紐づけて一時的に保持する
  3. クッキーにユーザを特定するキーを仕込んで、DBに保存した値と紐づける

1の方法はFacebook認証では実現できませんでした。1

OAuthによるログインはSocialiteというOAuthパッケージを利用する前提です。

FacebookAuthController.php

    // OAuth先サービスにリダイレクト
    public function redirectToProvider(Request $request)
    {
        // どのページからログインを試みたのかセッションに保持する
        $request->session()->push('loggedin-from','register-page-01');


        return Socialite::driver('facebook')->redirect();
    }

    // OAuth先サービスからのリダイレクトを受けるエンドポイント
    public function handleProviderCallback(Request $request) {
        // セッションから情報を取得する
        $loggedInFrom = $request->session()->get('loggedin-from', no-data);

        // 略) OAuth先から情報を取得してログインする処理
    }
  1. GETクエリは設定でき、OAuthの連携先であるFacebookにGETパラメータが送られるが、コールバック時にGETパラメータを返してくれなかったので、自サービスが受けるコールバックまでデータを伝搬できなかった。
    3の方法でも実現できますが、2の方がお手軽なので選択しませんでした。

5
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
5
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?