PHP プログラミング 技術解説

【Laravel 10】Auth::attempt実行時にvalidateCredentials()にてTypeErrorが発生する。自作Userモデル関連。

コトの発端

認証を自分で組んでたら、Auth::attempt実行時にTypeErrorエラーが発生した。

エラー内容

Illuminate\Auth\EloquentUserProvider::validateCredentials(): Argument #1 ($user) must be of type Illuminate\Contracts\Auth\Authenticatable, App\Models\User given ...

Authenticatableが渡されるところに、Modelが渡されてるってこと?

Auth::attempt()にはただの配列(credentials)しか渡した覚えないけど、裏側でユーザ情報のモデルを渡しているっぽい。

解決

UserモデルをAuthenticatableを継承して定義していなかったのが原因。

app/Models/User.php

...
class User extends Model 
{
...

下記の通り、Authenticatableを継承して定義しなおすことで解決。

...
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
...

Laravelインストール時のUserモデルをそのまま使用していれば発生しにくい問題であるが、Userモデルを自作しなおした結果、発生した問題であった。

あっきーの場合

あっきーの場合は上記の修正後に、Array to string conversionのエラーが発生した。

こちらの原因はprimaryKeyを配列にしていたことが原因であった。

配列を解除して正常動作した。

たまたま単一主キーやけど、複合主キーの場合はどないするんやろか。。。。

参考

Laravelでデータベース内の別テーブルでログインを切り替える方法

https://solomaker.club/how-to-use-another-table-as-login-in-laravel/

Error "Array to string conversion" when use Authentication in laravel

https://stackoverflow.com/questions/66948121/error-array-to-string-conversion-when-use-authentication-in-laravel

いつもの

記事の内容については無保証です。

  • この記事を書いた人
あっきー

あっきー

とある企業の研究者。研究分野以外に手を出しすぎて毎日が慌ただしい。 研究者の肩書きが正しいかどうかは万年の謎。 得意ジャンルはデータベースとセキュリティーですが、AIやIoT、アプリ開発など、手広く活動しています。

-PHP, プログラミング, 技術解説
-,

Translate »