前提
PHP7
Laravel8
Jetstream
を導入済み
やりたいこと
jetstreamのログイン機能でログインしたあと、各ユーザーのIDごとのページにリダイレクトさせたい。
準備
RouteServiceProviderの「HOME=◯◯」の部分にリダイレクトさせたいURLを入れる。
このとき、◯◯の部分は第2引数を持てないのでここでは一旦「redirects」というアドレスに飛ばして、その後パラメータ付きのURLに遷移させる。
app/Providers/RouteServiceProvider.php
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* This is used by Laravel authentication to redirect users after login.
*
* @var string
*/
public const HOME = 'redirects'; //ホーム画面としてリダイレクトしたいアドレスに変更
ルーティング。ここでは関数indexを立ち上げる。
routes/web.php
use App\Http\Controllers\RecordUsersController;
// ユーザー投稿の一覧表示画面
Route::get('/record/user/{user_id}', [RecordUsersController::class, 'show_by_user'])->name('show_by_user_record');s
use App\Http\Controllers\Auth\LoginController;
Route::post('logout',[LoginController::class, 'logout'])->name('logout');
Route::get('redirects',[LoginController::class, 'index']);//追記
ログイン後のリダイレクト先を指定する。
app/Http/Controllers/Auth/LoginController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Record;
use App\Models\User;
class LoginController extends Controller
{
public function index(Request $request)
{
$user = Auth::user();
return redirect(route('show_by_user_record',
[
'user_id' => $user->id
]));
}
これでログイン後はマイページにリダイレクトされるようになった。
困ったこと
下記エラーが表示されてなかなか進めなかった。
Illuminate\Routing\Exceptions\UrlGenerationException
Missing required parameter for [Route: show_by_user_record] [URI: record/user/{user_id}] [Missing parameter: user_id].
エラーが出ているときのLoginController
/app/Http/Controllers/Auth/LoginController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Record;
use App\Models\User;
class LoginController extends Controller
{
public function index(Request $request)
{
return redirect(route('show_by_user_record'));
}
「/record/user/{user_id}」のパラメータにどうやって値を渡せばいいのかわかなくてハマった。
「$user = Auth::user();」がないとユーザー情報が渡せないことになかなか気づかなかった。