質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

1435閲覧

どのユーザでログインしても、DBの一番上にあるユーザデータが出力されます。

phpartisan

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2021/06/05 22:28

編集2021/06/05 23:23

前提

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 -> デフォルト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/06/05 23:04

データと定義どうなってるのでしょう。
phpartisan

2021/06/05 23:20

ご回答ありがとうございます。 データと定義を追加いたしました。
m.ts10806

2021/06/06 01:53

既に回答で指摘された通りキー項目をフレームワークの想定外に変えたうえでそれをモデルで定義してないからでしょうね。
phpartisan

2021/06/06 02:13

ありがとうございました!!無事解決いたしました!
guest

回答1

0

ベストアンサー

Laravelではidが主キーだと想定している。
numberに変えるような余計なことしてるから動かない。

$primaryKeyで変更することもできるけど無駄な面倒が増えるだけなのでidのまま使ったほうがいい。
https://readouble.com/laravel/8.x/ja/eloquent.html#primary-keys

usersのマイグレーションを変更することはほとんどない。
わざわざ$table->id();なんて省略記法が用意されてるのはidは常に使うから。
https://github.com/laravel/laravel/blob/8.x/database/migrations/2014_10_12_000000_create_users_table.php

投稿2021/06/06 01:49

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phpartisan

2021/06/06 02:13

無事に解決いたしました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問