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

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

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

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

PHP

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

Q&A

0回答

1398閲覧

Laravel8 アカウント登録後,ログイン時のエラーについて

Thal

総合スコア14

Laravel

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

PHP

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

0グッド

0クリップ

投稿2021/12/11 17:48

編集2021/12/12 02:16

Laravel8にてアカウント登録、ログイン機能を自作しデータベースに登録までできたが、ログインの際に下記のエラーが出てしまいます
見る限りタイプミスはないはずです。
SessionGuard.phpはLaravelプロジェクト作成時より手を加えておりません。

TypeError Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\Models\User given, called in /Applications/MAMP/htdocs/app/TodoList/vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php on line 422

実現させたいこと

メールアドレス、パスワードを入力しログイン後、タスク画面を表示させたい

テスト環境
PHP 7.3.29
Laravel Framework 8.73.2
以下ファイルです。
route/web.php

PHP

1<?php 2 3use Illuminate\Support\Facades\Route; 4use App\Http\Controllers\Auth\AuthController; 5use App\Http\Controllers\Task\TaskController; 6use App\Http\Controllers\Auth\RegisterController; 7 8Route::group(['middleware' => ['guest']], function() 9{ 10 // ログインフォームの表示 11 Route::get('/', [AuthController::class, 'showLogin'])->name('login.show'); 12 13 // ログイン処理 14 Route::post('login', [AuthController::class, 'login'])->name('login'); 15 16 // タスク画面表示 17 Route::get('/task', [ListController::class, 'showTaskForm'])->name('task'); 18 19 // ユーザー登録フォームの表示 20 Route::get('/register', [RegisterController::class, 'showRegistrationForm'])->name('register'); 21 22 // ユーザー登録 23 Route::post('/', [RegisterController::class, 'exeRegistration'])->name('login.show'); 24});

app/Models/User.php

PHP

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class User extends Model 9{ 10 use HasFactory; 11 12 // テーブル名 13 protected $table = 'users'; 14 15 protected $fillable = [ 16 'name', 17 'email', 18 'password' 19 ]; 20} 21

app/Http/Controllers/Auth/AuthController.php

PHP

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\Http\Requests\LoginFormRequest; 7use Illuminate\Http\Request; 8use Illuminate\Support\Facades\Auth; 9 10class AuthController extends Controller 11{ 12 /** 13 * @return View 14 */ 15 public function showLogin() 16 { 17 return view('login.login_form'); 18 } 19 20 /** 21 * @param App\Http\Requests\LoginFormRequest 22 * $request 23 */ 24 public function login(LoginFormRequest $request) 25 { 26 27 $credentials = $request->only('email', 'password'); 28 if(Auth::attempt($credentials)){ 29 $request->session()->regenerate(); 30 31 return redirect('task'); 32 } 33 34 return back()->withErrors([ 35 'login_error' => 'メールアドレスもしくはパスワードが間違っています', 36 ]); 37 } 38}

追記

試したこと

laravelプロジェクト作成の作られるデフォルトのUser.phpを参考に下記のように書き換えたところ、質問のエラー文はでないが、データベースに登録したメアドとパスワードを入力しても間違っていてログインできない。
編集点
use Illuminate\Foundation\Auth\User as Authenticatable;を追加
継承をModelからAuthenticatableに変更

PHP

1<?php 2namespace App\Models; 3 4use Illuminate\Database\Eloquent\Factories\HasFactory; 5use Illuminate\Foundation\Auth\User as Authenticatable; 6use Illuminate\Database\Eloquent\Model; 7 8class User extends Authenticatable 9{ 10 use HasFactory; 11 12 // テーブル名 13 protected $table = 'users'; 14 15 protected $fillable = [ 16 'name', 17 'email', 18 'password' 19 ]; 20}

config/auth.phpを書き換える場合の対処法については自分の場合でどう書き換えたら良いかわからず試せていません。
config/auth.php

PHP

1<?php 2return [ 3 'defaults' => [ 4 'guard' => 'web', 5 'passwords' => 'users', 6 ], 7 8 'guards' => [ 9 'web' => [ 10 'driver' => 'session', 11 'provider' => 'users', 12 ], 13 ], 14 15 'providers' => [ 16 'users' => [ 17 'driver' => 'eloquent', 18 'model' => App\Models\User::class, 19 ], 20 21 // 'users' => [ 22 // 'driver' => 'database', 23 // 'table' => 'users', 24 // ], 25 ], 26 27 'passwords' => [ 28 'users' => [ 29 'provider' => 'users', 30 'table' => 'password_resets', 31 'expire' => 60, 32 'throttle' => 60, 33 ], 34 ], 35 36 'password_timeout' => 10800, 37];

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

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

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

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

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

m.ts10806

2021/12/11 23:59

エラーメッセージそのまま検索で出てくる情報もあるかと思いますが、それらは何も参考にならなかったのでしょうか。
Thal

2021/12/12 02:16

コメントありがとうございます。 参考にし試したこともありますので、情報追記させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問