yuanchang/lumen-passport

让 Laravel Passport 在 Lumen 中工作

v1.0.0 2018-04-12 05:32 UTC

This package is not auto-updated.

Last update: 2024-09-20 21:55:10 UTC


README

让 Laravel Passport 在 Lumen 中工作

一个简单的服务提供者,使 Laravel Passport 在 Lumen 中工作

特性

  • 支持 passport
  • 支持移动授权

依赖

  • PHP >= 5.6.3
  • Lumen >= 5.3
$ cd you-app
$ composer require yuanchanglumen-passport

或者手动编辑 composer.json

{
    "require": {
        "yuanchang/lumen-passport": "^1.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(YuanChang\LumenPassport\PassportServiceProvider::class);

如果您想使用移动授权类型,并且需要自定义验证移动验证类型。

您需要实现 MobileChecker 接口。

如果实现了 MobileChecker,需要扩展 MobileChecker

LumenPassport::extendMobileChecker(MobileChecker::class);

迁移并安装 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 方法。此方法将注册发布访问令牌和吊销访问令牌、客户端和个人访问令牌所需的路线

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 网络服务器,它可能会删除授权头,从而破坏 Passport。

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

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

许可证

MIT 许可证 (MIT) 版权 (c) 2016 Denis Mysenko

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

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

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和侵权不担保。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任源于合同、侵权或其他原因,以及与软件或软件的使用或其他交易有关。