前提
Windows10でlaravel8を使用しています。
発生している問題・エラーメッセージ
LoginControllerでAuth::attempt()でユーザ認証をした後に、app.blade.phpでAuth::user()->name、Auth::user()->imageで出力するデータが必ずDBの一番上にあるデータになります。どのユーザでログインしてもDBの一番上にあるユーザデータが出力されます。
該当のソースコード
LoginController
1 public function __construct() 2 { 3 $request = new Request; 4 $this->middleware('guest')->except('logout'); 5 6 7 } 8 9 public function logout(Request $request){ 10 11 Auth::logout(); 12 13 //dd($request); 14 15 $request->session()->invalidate(); 16 17 $request->session()->regenerateToken(); 18 19 return redirect('/home'); 20 } 21 22 public function login(Request $request) 23 { 24 $email = $request->input('email'); 25 $password = $request->input('password'); 26 $remember = $request->input('remember'); 27 28 if (Auth::attempt(['email' => $email, 'password' => $password,'delete_flag' => 1],$remember)) 29 { 30 // 認証に成功した 31 32 $request->session()->regenerate(); 33 34 return Auth::user(); 35 // ↑ここではログインを試みたユーザデータが出力されている。 36 37 return redirect()->route('home'); 38 } 39 40 return back()->withErrors([ 41 'email' => 'The provided credentials do not match our records.', 42 ]); 43 } 44} 45
app
1<body> 2 <div id="app"> 3 <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm"> 4 <div class="container"> 5 <a class="navbar-brand" href="{{ url('/') }}"> 6 {{ config('app.name', 'Laravel') }} 7 </a> 8 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}"> 9 <span class="navbar-toggler-icon"></span> 10 </button> 11 12 <div class="collapse navbar-collapse" id="navbarSupportedContent"> 13 <!-- Left Side Of Navbar --> 14 <ul class="navbar-nav mr-auto"> 15 16 </ul> 17 18 <!-- Right Side Of Navbar --> 19 <ul class="navbar-nav ml-auto"> 20 <!-- Authentication Links --> 21 @guest 22 @if (Route::has('login')) 23 <li class="nav-item"> 24 <a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a> 25 </li> 26 @endif 27 28 @if (Route::has('register')) 29 <li class="nav-item"> 30 <a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a> 31 </li> 32 @endif 33 @else 34 <li class="nav-item dropdown"> 35 <a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> 36 <img src="http://localhost:8000/storage/{{ Auth::user()->image }}" > 37 {{ Auth::user()->name }} 38 39 </a> 40 41 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> 42 <a class="dropdown-item" href="{{ route('logout') }}" 43 onclick="event.preventDefault(); 44 document.getElementById('logout-form').submit();"> 45 {{ __('Logout') }} 46 </a> 47 48 <form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none"> 49 @csrf 50 </form> 51 </div> 52 </li> 53 @endguest 54 </ul> 55 </div> 56 </div> 57 </nav> 58 59 <main class="py-4"> 60 @yield('content') 61 </main> 62 </div> 63</body> 64</html>
HomeController
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Support\Facades\Auth; 7 8class HomeController extends Controller 9{ 10 /** 11 * Create a new controller instance. 12 * 13 * @return void 14 */ 15 public function __construct() 16 { 17 $this->middleware('auth'); 18 } 19 20 /** 21 * Show the application dashboard. 22 * 23 * @return \Illuminate\Contracts\Support\Renderable 24 */ 25 public function index() 26 { 27 return view('home'); 28 } 29} 30
web
1Route::get('hoge/login', [App\Http\Controllers\Auth\LoginController::class,'showLoginForm'])->name('login'); 2Route::post('hoge/login', [App\Http\Controllers\Auth\LoginController::class,'login']); 3Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
table
1+------------------+---------------+------+-----+---------+----------------+ 2| Field | Type | Null | Key | Default | Extra | 3+------------------+---------------+------+-----+---------+----------------+ 4| number | int(11) | NO | PRI | NULL | auto_increment | 5| id | varchar(16) | NO | | NULL | | 6| password | varchar(255) | NO | | NULL | | 7| name | varchar(12) | NO | | NULL | | 8| email | varchar(255) | NO | | NULL | | 9| image | varchar(255) | NO | | NULL | | 10| gender | int(11) | YES | | NULL | | 11| user_description | varchar(1000) | NO | | NULL | | 12| reqruitment | int(11) | YES | | NULL | | 13| entry | int(11) | YES | | NULL | | 14| favorite | int(11) | YES | | NULL | | 15| delete_flag | int(11) | NO | | 1 | | 16| remember_token | varchar(100) | YES | | NULL | | 17| created_at | timestamp | YES | | NULL | | 18| updated_at | timestamp | YES | | NULL | | 19+------------------+---------------+------+-----+---------+----------------+ 20 21+--------+----------+--------------------------------------------------------------+------------+-----------------+--------------------+--------+------------------+-------+-------+----------+-------------+--------------------------------------------------------------+---------------------+---------------------+ 22| number | id | password | name | email | image | gender | user_description | reqruitment | entry | favorite | delete_flag | remember_token | created_at | updated_at | 23+--------+----------+--------------------------------------------------------------+------------+-----------------+--------------------+--------+------------------+-------+-------+----------+-------------+--------------------------------------------------------------+---------------------+---------------------+ 24| 1 | hogetest | $2y$10$D5LFZBlp1McEYS2fNrDiVOXVM4xtOkvpWB.AkjI6BzG/ZM4NhbjLu | uooooooooo | test@test.com | defaultUserImg.jpg | NULL | ほげ | NULL | NULL | NULL | 1 | NULL | 2021-06-02 08:04:18 | 2021-06-02 08:04:18 | 25| 2 | testhoge | $2y$10$snhNp4fl4Ax47HDF.uVZyuhgrwnCVc56XNF6HBURfAnpbOGowI8fm | test | test@test.co.jp | defaultUserImg.jpg | NULL | ほげほげ | NULL | NULL | NULL | 1 | 1eJnSmPSNrMLsFYx67QoEGafpVsgUh1NjPJcZfB6nYhyfeGmcSQiUtTR7Q0C | 2021-06-02 08:04:45 | 2021-06-02 08:04:45 | 26+--------+----------+--------------------------------------------------------------+------------+-----------------+--------------------+--------+------------------+-------+-------+----------+-------------+--------------------------------------------------------------+---------------------+---------------------
試したこと
・試しにapp.blade.phpではなくLoginController内でAuth::user()をreturnしてみると、ちゃんとログインを試みたユーザのデータが出力されます。しかし、app.blade.phpで同じくAuth::user()->nameを出力すると何故かログインを試みたユーザではなく、DBの一番上にあるデータが出力されます。
・LoginController内のセッションの再生成が原因かと思い、削除してみましたが挙動は変わりませんでした。
・デフォルトのLoginControllerのloginメソッドがおかしいのかと思い、試しにloginメソッドを自作してみましたがダメでした。(掲載しているソースコードが自作したloginです)
補足情報(FW/ツールのバージョンなど)
・Windows10
・laravel8
ソースコードの現状の概要です。
・LoginController -> 元々デフォルトで使用していましたが、今回の問題が発生したためLoginメソッドは試しに自作しました。(なお解決せず)
・app.blade.php -> デフォルト(Userのプロフィール画像を出力するAuth::user()->imageだけ追加しています。)
・HomeController -> デフォルト
・web.php -> デフォルト
回答1件
あなたの回答
tips
プレビュー