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

Laravel 5.8 Passport在AuthServiceProvider报错及客户端ID创建咨询

问题分析与解决方案

报错原因

结合你的代码和Laravel 5.8的Passport特性,报错主要来自三个核心点:

  1. 缺失remember_token字段:你的User模型继承了Authenticatable trait,这个 trait 依赖remember_token字段处理会话相关逻辑,Passport初始化路由和token配置时会调用该 trait 的方法,缺失此字段会触发「数据库字段不存在」的错误。
  2. API Guard驱动未切换为Passport:你仅修改了认证提供者,但config/auth.php中api guard的驱动仍为默认的token,未切换为passport,导致Passport的路由无法绑定正确的认证逻辑。
  3. 未执行Passport专属迁移:Passport需要oauth_clients、oauth_access_tokens等专属表存储令牌和客户端信息,若未执行迁移,这些表不存在会直接导致路由初始化失败。

解决步骤

1. 恢复remember_token字段

即使你不需要「记住我」功能,Authenticatable trait 仍依赖这个字段。如果已经运行过用户表迁移,创建新迁移来添加该字段:

php artisan make:migration add_remember_token_to_users_table

在生成的迁移文件中写入:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->rememberToken();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('remember_token');
    });
}

执行迁移:

php artisan migrate

2. 配置API Guard为Passport

修改config/auth.php的guards部分,将api的驱动改为passport:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport', // 替换为passport驱动
        'provider' => 'users',
    ],
],

3. 完成Passport的安装与迁移

确保Passport的迁移文件已发布并执行:

# 发布Passport迁移文件(首次安装需执行)
php artisan vendor:publish --tag=passport-migrations

# 执行所有数据库迁移
php artisan migrate

# 安装Passport(生成加密密钥与默认客户端)
php artisan passport:install

4. 启用Passport配置并清除缓存

取消AuthServiceProvider中那三行代码的注释,然后清除配置和路由缓存:

php artisan config:clear
php artisan route:clear

创建客户端ID的方法

有两种常用方式生成Passport客户端:

方式1:使用Artisan命令(推荐)

执行以下命令,按照提示完成配置:

php artisan passport:client
  • 选择Password Grant Client:适合移动端或第三方客户端通过用户名密码获取令牌
  • 输入客户端名称(如「My App API Client」)
  • 回调URL可留空(密码授权模式不需要)
  • 完成后会输出客户端ID和密钥,务必保存这两个值。

方式2:代码动态创建

如果需要在业务逻辑中动态生成客户端,可使用Passport的Client模型:

use Laravel\Passport\Client;
use Illuminate\Support\Str;

$client = Client::create([
    'name' => 'Dynamic API Client',
    'secret' => Str::random(40),
    'redirect' => 'http://your-app-callback-url.com', // 根据业务需求填写
    'personal_access_client' => false,
    'password_client' => true, // 标记为密码授权客户端
    'revoked' => false,
]);

// 获取客户端ID和密钥
$clientId = $client->id;
$clientSecret = $client->secret;

内容的提问来源于stack exchange,提问作者Alaksandar Jesus Gene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:29:48