Laravel Breeze注册用户仅写入邮箱与时间戳字段问题排查
问题根因
该问题是Laravel的批量赋值保护机制导致的:调用User::create()批量写入数据时,只有在User模型$fillable白名单内的字段才会被允许写入数据库,不在白名单中的字段会被自动过滤,这就是传入name、password参数但数据库对应字段为空的核心原因。
修复方案
- 打开
app/Models/User.php模型文件 - 找到类内定义的
$fillable属性,将name、password加入白名单数组,正确配置参考如下:
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable { use HasApiTokens, Notifiable; /** * 可批量赋值的字段白名单 * * @var array<int, string> */ protected $fillable = [ 'name', 'email', 'password', ]; // 其余模型配置代码... }
- 保存文件后重新测试注册流程,字段即可正常写入。
备用排查项(上述修复无效时检查)
- 检查users表结构:打开对应迁移文件(路径为
database/migrations/[日期]_create_users_table.php),确认表结构中存在name(string类型)、password(string类型,长度建议设置为255,避免哈希值截断)字段。本地测试环境可执行php artisan migrate:fresh重置表结构,生产环境请单独编写补字段的迁移文件执行,不要直接重置表丢失数据。 - 删除你在
store方法中添加的三行echo调试代码,输出内容会打断后续的注册事件触发、登录、跳转逻辑,导致流程异常。 - 检查是否编写了User模型的观察者、或者全局中间件拦截了name、password字段的写入,移除对应拦截逻辑即可。
内容的提问来源于stack exchange,提问作者Calum Childs
相关产品推荐
相关产品推荐

