🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

PHP

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

Q&A

解決済

1回答

1534閲覧

【Laravel 5.8.38】会員登録時にエラー発生

ohshiro_hide

総合スコア3

Laravel

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

PHP

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

0グッド

0クリップ

投稿2021/03/11 00:23

前提・実現したいこと

Laravelでブログを作成していますが、会員機能を実装中にエラーが発生しました。
phpMyAdminのuserテーブルに登録はできていますが、以下のエラーメッセージが表示されます。

発生している問題・エラーメッセージ

Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\User given, called in C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 35

該当のソースコード

C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php */ public function loginUsingId($id, $remember = false) { if (! is_null($user = $this->provider->retrieveById($id))) { $this->login($user, $remember); return $user; } return false; } /** * Log a user into the application. * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @param bool $remember * @return void */ public function login(AuthenticatableContract $user, $remember = false) { $this->updateSession($user->getAuthIdentifier()); // If the user should be permanently "remembered" by the application we will // queue a permanent cookie that contains the encrypted copy of the user // identifier. We will then decrypt this later to retrieve the users. if ($remember) { $this->ensureRememberTokenIsSet($user); $this->queueRecallerCookie($user); } // If we have an event dispatcher instance set we will fire an event so that // any listeners will hook into the authentication events and run actions // based on the login and logout events fired from the guard instances. $this->fireLoginEvent($user, $remember); $this->setUser($user); } Arguments
App\User.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'users'; protected $fillable = [ 'name', 'email', 'email_verified_at', 'password' ]; }
config\auth.php <?php return [ /* |-------------------------------------------------------------------------- | Authentication Defaults |-------------------------------------------------------------------------- | | This option controls the default authentication "guard" and password | reset options for your application. You may change these defaults | as required, but they're a perfect start for most applications. | */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you | here which uses session storage and the Eloquent user provider. | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | Supported: "session", "token" | */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ], /* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | If you have multiple user tables or models you may configure multiple | sources which represent each model / table. These sources may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" | */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ];
### 試したこと エラーメッセージを翻訳しましたが理解できませんでした。 テーブル名や綴りの見直しを実施するも解決に至りませんでした。 ### 補足情報(FW/ツールのバージョンなど) windows10pro xampp

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

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

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

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

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

Lulucom

2021/03/11 00:27

過去によく似た質問があったような・・・
Lulucom

2021/03/11 02:01 編集

良かったら、参考にされたサイトがあれば、それも質問に掲載していただけますか? 何故かみなさん同じように書いておられて、もしかしたら、間違った(あるいはバージョン違いの)情報を参考にされているのではないかと思ったからです。
ohshiro_hide

2021/03/11 08:24

お返事ありがとうございます。参考にしたのは以下のリンクです。そのときに気になったのは、回答者のgithubのリンク先(旧バージョンのコード内容…)が無くなってたことです。どのような記述で良いのかいろいろ調べてもわかりませんでした。 https://teratail.com/questions/181040
Lulucom

2021/03/11 08:45

ありがとうございます。リンク先の質問のコードに惑わされて(?)余計な変更をしてしまったのかもしれませんね。Laravelバージョンが異なる情報を参考にするのは避けましょう。はまる原因になりやすいです。5.7->5.8の違いは小さいのかもしれませんが十分な注意が必要です。 なお、追記・修正の依頼に対しては、質問自体を編集して対応していただくと良いです。その場合、teratailから依頼者へ通知が来ますので、この欄で返信していただく手間も省けます。
guest

回答1

0

ベストアンサー

こちらの現象と同じでしょうか?参考になりますでしょうか。

https://teratail.com/questions/324531

Modelを継承するのではなく、Authenticatableを継承するとどうでしょうか。

Laravel 5.8でプロジェクト作成当初のUserクラスは以下のようになっていたはずです。
https://github.com/laravel/laravel/blob/5.8/app/User.php

投稿2021/03/11 00:28

編集2021/03/11 08:55
Lulucom

総合スコア1899

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

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

ohshiro_hide

2021/03/11 11:43

ありがとうございます!リンク先のコードに置き換えると無事登録ができました! Laravel5であれば問題ないだろうと思ってしまっていました。ご教示いただきありがとうございます。 ModelとAuthenticatableの継承の違いについて理解できていないので勉強いたします。
Lulucom

2021/03/11 12:05

よかったです^ ^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問