如何卸载 Laravel Passport

Posted

技术标签:

【中文标题】如何卸载 Laravel Passport【英文标题】:How to uninstall Laravel Passport 【发布时间】:2018-05-14 00:22:58 【问题描述】:

我决定使用 JWT 并从项目中完全删除 Laravel Passport。

我试图从composer remove laravel/passport 开始。但是,它没有好处:

  [Symfony\Component\Debug\Exception\FatalThrowableError]
  Class 'Laravel\Passport\Passport' not found


Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1

Removal failed, reverting ./composer.json to its original content.

什么是正确且安全的移除程序?

【问题讨论】:

【参考方案1】:

使用 Laravel 7,我是这样做的:

第 1 步。 在文件 app/Providers/AuthServiceProvider.php 中,删除这两行:

use Laravel\Passport\Passport;
Passport::routes();

第 2 步。

$ composer remove laravel/passport
$ rm -r ./resources/js/components/passport # if any
$ rm -r ./resources/views/vendor/passport # if any

第 3 步。 在文件 resources/js/app.js 中,删除护照组件注册。如果您在某处使用过这些已注册的组件,您也可以找到并删除它:

$ grep -rn 'passport-authorized-clients'     resources/js/*
$ grep -rn 'passport-personal-access-tokens' resources/js/*
$ grep -rn 'passport-clients'                resources/js/*

第 4 步。 从您的模型中查找并删除 HasApiTokens

$ grep -rn HasApiTokens * 

同时删除与之相关的导入行:

use Laravel\Passport\HasApiTokens;

第 5 步。 删除 oauth

$ rm storage/oauth-*.key

第 6 步。在文件 config/auth.php 中,查找 guards:api:driver 并将 passport 还原为 token

第 7 步。 删除 Passport 表并清理迁移表

$ php artisan tinker
>>> Schema::drop('oauth_access_tokens');
>>> Schema::drop('oauth_auth_codes');
>>> Schema::drop('oauth_clients');
>>> Schema::drop('oauth_personal_access_clients');
>>> Schema::drop('oauth_refresh_tokens');
>>> DB::table('migrations')->where('migration', 'like', '%_oauth_access_tokens_table')->delete();
>>> DB::table('migrations')->where('migration', 'like', '%_oauth_auth_codes_table')->delete();
>>> DB::table('migrations')->where('migration', 'like', '%_oauth_clients_table')->delete();
>>> DB::table('migrations')->where('migration', 'like', '%_oauth_personal_access_clients_table')->delete();
>>> DB::table('migrations')->where('migration', 'like', '%_oauth_refresh_tokens_table')->delete();
>>> exit

第 8 步。最后,刷新您的安装:

$ composer dump-autoload
$ php artisan optimize:clear
$ npm run dev

【讨论】:

如果其他开发人员正在使用相同的代码库或者这已经在暂存/生产中,最好创建一个迁移以删除表。【参考方案2】:

按照保罗的步骤。删除数据库迁移表中的 Passport Migrations 并运行命令artisan migrate:refresh

【讨论】:

将此作为评论添加到保罗的回答下【参考方案3】:

您可以通过在composer.json 文件中手动删除此行"laravel/passport": "^4.0" 然后运行composer update 来删除护照。

如果您运行的是 Laravel 5.4 或更低版本,请确保在您的 app.config 文件 Laravel\Passport\PassportServiceProvider::class 中删除此行

所有依赖护照的课程也必须进行编辑。最常见的类是:

    User 模型,删除 HasApiToken 特征。 AuthServiceProvider,在你的引导方法中移除 Passport::routes();。 您的config/auth.php,更改api 身份验证的驱动程序选项

【讨论】:

php artisan migrate:refresh 在步骤结束时运行。删除数据库迁移表中的 Passport Migrations。但请小心你在生产中。 与其手动从 composer.json 中删除,我更喜欢:composer remove laravel/passport

以上是关于如何卸载 Laravel Passport的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义数据添加到 Laravel Passport API 令牌?

如何使用 Laravel Passport 组织这样的路由保护?

如何使用 Laravel Passport (5.3) 记录身份验证尝试

如何使用 Laravel Passport 访问令牌

如何使用带有自定义用户名列的 Laravel Passport

如何从 Laravel Passport 中的刷新令牌中获取 id?