やりたいこと
- マイページを自分(特定のユーザー)以外がアクセスできないようにしたい。
- 未ログイン状態からのアクセスがあればログイン画面にリダイレクトしたい。
- ログイン済みであっても他人のマイページは閲覧できないようにしたい。
環境
PHP7
Laravel8
前提
- マイページそのものは作成しておく
- マイページのURLにパラメータとしてユーザーIDが表示される状態になっている
コントローラー
コントローラーでは、if文を使ってパラメーターに入るユーザーIDとアクセスしようとしているユーザーのユーザーIDが一致しないと閲覧できないようにした。
app/Http/Controllers/RecordUsersController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Record;
use App\Models\User;
use Illuminate\Support\Facades\DB;
class RecordUsersController extends Controller
{
//
public function show_by_user($id)
{
$user = Auth::user();
$id = Auth::id();
$user = User::find($id);
$records = Record::where('user_id',$user->id)->sortable()->get();
if($user->id == $id){
return view('record.showbyuser', [
'user_name' => $user->name,
'records' => $records,
]);
}else{
return redirect('/login');
}
}
}
ルーティング
ルーティングでは->middleware('auth')
を追記して、未ログイン状態からアクセスするとログインを要求するように変更。
routes/web.php
use App\Http\Controllers\RecordUsersController;
// ユーザー投稿の一覧表示画面
Route::get('/record/user/{user_id}', [RecordUsersController::class, 'show_by_user'])->name('show_by_user_record')->middleware('auth');
できたこと
- マイページを自分(特定のユーザー)以外がアクセスできないようになった。
- 未ログイン状態からのアクセスがあればログイン画面にリダイレクトするようになった。
- ログイン済みであっても他人のマイページは閲覧できないようになった。
うまくいっていないこと
URLパラメーターに入るユーザーIDがアクセスしようとするユーザーIDと一致しないときにエラー文を表示したり、別ページにリダイレクトさせようとしたができなかった。if~else..の記述に問題があると思われるが、現状原因不明のまま。今後改善したい。