Laravel Sanctum でログインできなかったのが User のプロパティのせいだった

  • URLをコピーしました!

Swagger PHP を使っています。Schemaの記述をModelでおこなっていました。
Userは、下のような記述になっていました。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Database\Eloquent\SoftDeletes;
use Openapi\Annotations as OA;

/**
 * @OA\Schema(
 *  description="ユーザー"
 * )
 */
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'remember_token',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    /**
     * ID
     * @var integer
     * @OA\Property()
     */
    protected $id;

    /**
     * ユーザー名
     * @var string
     * @OA\Property()
     */
    protected $name;

    /**
     * メールアドレス
     * @var string
     * @OA\Property()
     */
    protected $email;

    /**
     * メールアドレス認証日時
     * @var string
     * @OA\Property(format="date-time")
     */
    protected $email_verified_at;

    /**
     * パスワード
     * @var string
     * @OA\Property()
     */
    protected $password;

これで、 Auth::attempt($credentials) を実行しても、emailやパスワードがあっていても、必ず false (ログインできませーん)が返ってきます。
原因は、 User に、 protected $password が宣言されているからでした。
// protected $password にしたら、Auth::attempt($credentials) は true を返してくれましたーー!よかった!

たぶん、Modelがpropertyを自動設定してくれる機能を、わたしが書いた宣言が邪魔してしまったんだと思います。
とりあえずコメントにして対応しましたが、もう少し attempt の動きを追いかけて、きちんと対応したいです。

ツチノコテクノロジーでは一緒に働く仲間を募集しています!

完全リモートで働きたい方へ!

詳しくは以下をご覧ください。

ツチノコテクノロジー採用サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ツチノコテックアカデミアの記事は、社内で誰かが質問してくれたことに回答したときに、ついでに記載しています!(^^)/
みんなの悩みを共有すれば、きっと誰かの役に立つと信じて更新しています!

目次