Laravel中Auth::user()->id获取uniqid生成的用户ID被截断问题
解决Laravel中Auth获取字符串ID被截断的问题
问题原因
Laravel默认的User模型会将id字段视为自增整数类型,当你使用uniqid()生成的字符串ID时,模型会自动尝试将其转换为整数,导致字符串中数字后的非数字部分(比如示例中的d9)被截断。
解决方案
1. 修改User模型的ID类型配置
在app/Models/User.php中添加或修改以下两个属性,明确告知Laravel这是一个非自增的字符串ID:
class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 关闭自增ID特性 public $incrementing = false; // 指定ID的数据类型为字符串 protected $keyType = 'string'; // ... 其他原有代码 }
2. 确保数据库字段类型正确
如果之前的迁移已经执行,需确认数据库中users表的id字段确实是字符串类型(如VARCHAR或CHAR)。若修改迁移后未重新执行,可按以下步骤更新:
# 创建修改迁移文件 php artisan make:migration alter_users_id_type --table=users
在生成的迁移文件中写入:
public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('id')->primary()->change(); }); } public function down(): void { Schema::table('users', function (Blueprint $table) { $table->char('id', 13)->primary()->change(); }); }
执行迁移:
php artisan migrate
3. 清除Laravel缓存
确保模型修改生效,运行命令清除缓存:
php artisan optimize:clear
验证
完成上述操作后,再次通过Auth::user()->id或Auth::id()获取用户ID时,就能得到完整的字符串ID(如64538065859d9)。
内容的提问来源于stack exchange,提问作者Diky Wahyudi
相关产品推荐
相关产品推荐

