ユーザ一覧から代理ログイン処理をさせていたのですが、代理ログインから戻ってきたとき、単なるリダイレクトでは絞り込み状態や表示ページが保持されず固定ページになってしまいます。
セッションにURLを記憶させることで、代理ログイン終了時に元いたURLを表示する方法をメモしておきます。
※メモです。時間ができたら、わかりやすく書き直す予定です。
laravel-impersonateを使った代理ログインで代理ログイン終了後にもともといたURLに戻る方法
代理ログインに使える impersonate
変更箇所
以下のように、代理ログイン開始時に セッションデータに URLを保管しておきます。
impersonate()メソッドは、URLがimpersonate/user_id となるため、直前のURLである url()->previous() を保管してます。
代理ログイン終了時のリダイレクト先に保管しておいたセッションデータを指定すればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\User; class ImpersonationController extends Controller { public function __construct() { $this->middleware('auth'); } //代理ログイン開始 public function impersonate($user_id){ $coach = auth()->user(); $user = User::find($user_id); $coach->impersonate($user); session(['previous_url' => url()->previous()]); return redirect('/'); } //代理ログイン終了 public function impersonate_leave(){ auth()->user()->leaveImpersonation(); $previous_url = session('previous_url', '/users'); return redirect($previous_url); } } |
参考:ルーティング
1 2 3 |
//代理ログイン Route::get('impersonate/{user_id}', 'ImpersonationController@impersonate')->name('impersonate'); Route::get('impersonate_leave', 'ImpersonationController@impersonate_leave')->name('impersonate_leave');; |
コメント