You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11中Auth::attempt()无法保存数据库会话问题求助

问题原因

报错核心是Laravel默认生成的会话ID格式与你定义的sessions表id字段的UUID类型不匹配。你将sessions.id设为PostgreSQL的uuid类型,但Laravel默认生成的会话ID是40位随机字符串(如gI1HNhCI1bLFxLMkANIHJUi4t3sANFrdaDpO0jCi),不符合PostgreSQL对UUID格式(36位带连字符,如550e8400-e29b-41d4-a716-446655440000)的要求,导致SQL执行失败。

解决方案

1. 配置Laravel生成标准UUID格式的会话ID

修改config/session.php文件,添加id_generator配置项,指定用Laravel的UUID生成器生成会话ID:

return [
    // 其他原有配置...
    'driver' => 'database',
    'id_generator' => fn () => Illuminate\Support\Str::uuid()->toString(),
];

或者在app/Providers/AppServiceProvider.php的boot方法中全局设置会话ID生成规则:

use Illuminate\Support\Str;
use Illuminate\Session\Middleware\StartSession;

public function boot()
{
    StartSession::useIdGenerator(fn () => Str::uuid()->toString());
}

2. 确保用户模型的UUID配置正确

确认你的User模型已正确设置UUID作为主键:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class User extends Model
{
    public $incrementing = false;
    protected $keyType = 'uuid';

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            if (empty($model->id)) {
                $model->id = Str::uuid();
            }
        });
    }
}

3. 清除旧会话数据

执行Artisan命令清除所有旧的非UUID格式会话,避免残留数据干扰:

php artisan session:clear
验证

完成以上配置后重新调用登录接口,Auth::attempt()应该能正常完成会话创建,不会再出现UUID格式错误。

内容的提问来源于stack exchange,提问作者jmakinin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:27:31