mjacques3 / lumen-passport
使Laravel Passport与Lumen兼容
Requires
- php: >=5.6.4
- illuminate/database: ~5.3|~5.4|~5.5|~5.6|^6.0|^7.0|^8.0
- illuminate/support: ~5.3|~5.4|~5.5|~5.6|^6.0|^7.0|^8.0
- laminas/laminas-diactoros: ^2.4
- laravel/passport: >=0.2.2
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- fzaninotto/faker: ~1.4
- phpunit/phpunit: ~5.0
This package is not auto-updated.
Last update: 2024-09-21 11:58:19 UTC
README
使Laravel Passport与Lumen兼容
一个简单的服务提供者,使Laravel Passport能够在Lumen中工作
依赖关系
- PHP >= 5.6.3
- Lumen >= 5.3
通过Composer安装
如果您还没有安装Lumen,请首先安装它
$ composer create-project --prefer-dist laravel/lumen lumen-app
然后安装Lumen Passport(它将同时获取Laravel Passport)
$ cd lumen-app
$ composer require dusterio/lumen-passport
或者,如果您愿意,可以手动编辑composer.json
{ "require": { "dusterio/lumen-passport": "^0.3.0" } }
修改引导流程(bootstrap/app.php
文件)
我们需要启用Laravel Passport提供者和Lumen特定提供者
// Enable Facades $app->withFacades(); // Enable Eloquent $app->withEloquent(); // Enable auth middleware (shipped with Lumen) $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); // Finally register two service providers - original one and Lumen adapter $app->register(Laravel\Passport\PassportServiceProvider::class); $app->register(Dusterio\LumenPassport\PassportServiceProvider::class);
与Laravel Passport 7.3.2及更高版本一起使用
Laravel Passport 7.3.2有一个重大变更 - 在Application类中引入了新的方法,该方法在Laravel中存在但在Lumen中不存在。您可以选择锁定到较旧版本,或者在bootstrap/app.php
文件顶部进行以下替换
$app = new \Dusterio\LumenPassport\Lumen7Application( dirname(__DIR__) );
如果您查看这个类,它只是添加了一个额外的方法configurationIsCached(),它始终返回false。
迁移并安装Laravel Passport
# Create new tables for Passport php artisan migrate # Install encryption keys and other necessary stuff for Passport php artisan passport:install
已安装的路由
在调用routes()方法后,此包会挂载以下路由(请参阅下面的说明)
请注意,由于Laravel Passport的一些路由是Web相关的,并且依赖于会话(例如授权页面),因此必须将其“删除”。Lumen是一个API框架,因此只包含与API相关的路由。
配置
编辑config/auth.php以满足您的需求。一个简单的示例
return [ 'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => \App\User::class ] ] ];
由于Lumen不会自动加载配置文件,请在bootstrap/app.php
中加载该配置
$app->configure('auth');
注册路由
接下来,您应该在您的应用程序的boot方法(您的服务提供者之一)中调用LumenPassport::routes方法。此方法将注册发行访问令牌和撤销访问令牌、客户端和个人访问令牌所必需的路由
\Dusterio\LumenPassport\LumenPassport::routes($this->app);
您可以将它添加到现有的组中,或者像这样独立添加此路由注册器
\Dusterio\LumenPassport\LumenPassport::routes($this->app, ['prefix' => 'v1/oauth']);
用户模型
请确保您的用户模型使用Passport的HasApiTokens
特质,例如。
class User extends Model implements AuthenticatableContract, AuthorizableContract { use HasApiTokens, Authenticatable, Authorizable; /* rest of the model */ }
额外功能
有一些在Laravel Passport中不存在的额外功能
允许每个客户端多个令牌
有时允许每个密码授权客户端多个访问令牌很有用。例如,用户可以从多个浏览器同时登录。目前Laravel Passport不允许这样做。
use Dusterio\LumenPassport\LumenPassport; // Somewhere in your application service provider or bootstrap process LumenPassport::allowMultipleTokens();
不同密码客户端的不同TTL
Laravel Passport允许设置一个全局的TTL(生存时间)来设置访问令牌,但有时可能需要为不同的客户端设置不同的TTL(例如,移动用户比桌面用户有更多时间)。
只需在您的服务提供者中执行以下操作
// Second parameter is the client Id LumenPassport::tokensExpireIn(Carbon::now()->addYears(50), 2);
如果您没有指定客户端ID,它将简单地回退到Laravel Passport实现。
用于清除过期令牌的控制台命令
只需运行php artisan passport:purge
即可从数据库中删除过期的刷新令牌及其相应的访问令牌。
在Apache httpd中运行
如果您正在使用Apache Web服务器,它可能会剥离Authorization头,从而破坏Passport。
将以下内容添加到您的配置中或添加到.htaccess
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
视频教程
我刚刚开始了一个教育YouTube频道,该频道将涵盖软件开发和DevOps中的顶级IT趋势:config.sys
此外,我很高兴宣布我的最新工具——GrammarCI,这是一个代码的自动拼写和语法检查工具(作为CI/CD流程的一部分),以确保您的用户不会看到您的错别字 :)
许可证
MIT许可(MIT)版权所有 (c) 2016 Denis Mysenko
任何人获得此软件及其相关文档副本("软件")的副本,均可免费处理该软件,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,以及允许获得该软件的人进行此类操作,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是包括但不限于适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论这些责任是在合同行为、侵权或其他行为中产生的,无论这些责任是否与软件或其使用或其他操作有关。