samfrm/lumen-passport

使Laravel Passport与Lumen兼容

v0.1.1 2022-03-16 11:32 UTC

This package is auto-updated.

Last update: 2024-09-16 16:49:12 UTC


README

分支自: lumen-passport,用于Lumen > 9.x

使Laravel Passport与Lumen兼容

一个简单的服务提供者,使Laravel Passport能够在Lumen上运行

依赖关系

  • PHP >= 8.0
  • Lumen >= 9.0

通过Composer安装

如果还没有Lumen,请先安装Lumen

$ composer create-project --prefer-dist laravel/lumen lumen-app

然后安装Lumen Passport(它将一起获取Laravel Passport)

$ cd lumen-app
$ composer require samfrm/lumen-passport

或者,如果您愿意,手动编辑composer.json

{
    "require": {
        "samfrm/lumen-passport": "^0.1"
    }
}

修改引导流程(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(Samfrm\LumenPassport\PassportServiceProvider::class);

与Laravel Passport 7.3.2及更高版本一起使用

Laravel Passport 7.3.2有一个破坏性的更改 - 在Application类上引入了新方法,该方法在Laravel中存在,但在Lumen中不存在。您可以选择锁定到较旧版本或在bootstrap/app.php 文件的顶部进行如下替换

$app = new \Samfrm\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
        ]
    ]
];

bootstrap/app.php中加载配置,因为Lumen不会自动加载配置文件

$app->configure('auth');

注册路由

接下来,您应该在应用程序的boot方法(您的服务提供者之一)中调用LumenPassport::routes方法。此方法将注册发行访问令牌和撤销访问令牌、客户端和个人访问令牌所必需的路由

\Samfrm\LumenPassport\LumenPassport::routes($this->app);

您可以将它添加到现有的组中,或者像这样独立添加此路由注册器;

\Samfrm\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 Samfrm\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网络服务器,它可能会清除Authorization头,从而破坏Passport。

将以下内容添加到您的配置中或添加到.htaccess

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

许可协议

MIT许可协议(MIT)版权所有 (c) 2016 Denis Mysenko

在此特此授予任何人免费获得本软件及其相关文档文件(以下简称“软件”)的副本的权利,允许在不加限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供者提供这样做的人,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同行为、侵权行为或其他情况下产生的,与软件或软件的使用或其他处理有关。