Laravel 8整合Passport与MongoDB出现依赖冲突如何解决?
解决方案
这里提供两种可行的适配方案,优先推荐手动适配方案,不需要额外依赖第三方适配包,稳定性更高,更适合生产环境使用。
方案一:手动适配(推荐)
- 第一步:确保你已经正常安装好
laravel/passport:^10.1和jenssegers/mongodb:^3.8,先不要安装designmynight的适配包 - 第二步:创建Passport相关的自定义Mongo模型,在
app/Models目录下新建Passport文件夹,然后在文件夹内新增4个模型文件:app/Models/Passport/Client.php
<?php namespace App\Models\Passport; use Jenssegers\Mongodb\Eloquent\Model; use Laravel\Passport\ClientInterface; class Client extends Model implements ClientInterface { protected $connection = 'mongodb'; protected $collection = 'oauth_clients'; }app/Models/Passport/AuthCode.php
<?php namespace App\Models\Passport; use Jenssegers\Mongodb\Eloquent\Model; class AuthCode extends Model { protected $connection = 'mongodb'; protected $collection = 'oauth_auth_codes'; }app/Models/Passport/PersonalAccessClient.php
<?php namespace App\Models\Passport; use Jenssegers\Mongodb\Eloquent\Model; class PersonalAccessClient extends Model { protected $connection = 'mongodb'; protected $collection = 'oauth_personal_access_clients'; }app/Models/Passport/Token.php
<?php namespace App\Models\Passport; use Jenssegers\Mongodb\Eloquent\Model; class Token extends Model { protected $connection = 'mongodb'; protected $collection = 'oauth_access_tokens'; } - 第三步:在
app/Providers/AppServiceProvider.php的boot方法中注册自定义的Passport模型:public function boot() { // 保留原有boot方法的其他代码 \Laravel\Passport\Passport::useClientModel(\App\Models\Passport\Client::class); \Laravel\Passport\Passport::useAuthCodeModel(\App\Models\Passport\AuthCode::class); \Laravel\Passport\Passport::usePersonalAccessClientModel(\App\Models\Passport\PersonalAccessClient::class); \Laravel\Passport\Passport::useTokenModel(\App\Models\Passport\Token::class); } - 第四步:修改你的User模型,确保继承Mongo的用户基类且引入Passport的API令牌trait:
use Jenssegers\Mongodb\Auth\User as Authenticatable; use Laravel\Passport\HasApiTokens; class User extends Authenticatable { use HasApiTokens; // 保留User模型的其他原有代码 } - 最后执行
php artisan passport:install生成加密密钥和客户端,即可正常使用Passport的所有功能。
方案二:忽略版本冲突强制安装
如果你临时测试需要快速使用designmynight/laravel-mongodb-passport包,可以通过composer参数忽略版本约束,执行以下安装命令即可:
composer require designmynight/laravel-mongodb-passport:2.0.1 -W --ignore-platform-reqs
注意:该方案跳过了版本依赖校验,可能存在兼容性风险,仅建议临时测试时使用,不推荐用于生产环境。
内容的提问来源于stack exchange,提问作者VL4DiMiRG
相关产品推荐
相关产品推荐

