endropie / lumen-micro-serve
v0.1.6
2022-02-23 13:43 UTC
Requires
- firebase/php-jwt: 5.5
- illuminate/auth: ^8.0|^9.0
- illuminate/contracts: ^8.0|^9.0
- illuminate/database: ^8.0|^9.0
- illuminate/http: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
README
Lumen 框架的简单微服务。
- 在 Auth-Service 上进行身份验证。
- 在其他服务上进行授权。
- 模型可筛选 [即将推出]。
- 模型 JSON 资源 [即将推出]。
安装
标准 Composer 包安装
composer require Endropie/LumenMicroServe
用法
在 Auth-Service 上进行身份验证
- 发布配置文件。这将创建一个用于基本配置选项的
config/jwt.php
文件。
php artisan vendor:publish --provider="Endropie\LumenMicroserve\AuthServiceProvider" --tag="config"
- 使用
jwt
驱动程序在您的身份验证配置文件中添加一个新的身份验证守卫。
// config/auth.php 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', // Model eloquent for auth user provider 'model' => App\Models\User::class, ], ],
- 使用这个新的守卫保护您的 API 路由。
$router->group(['middleware' => 'auth'], function () use ($router) { $router->get('/user', function() { return auth()->user()->toArray(); }); });
- 在您的 Auth 模型(例如 User)上使用此包提供的
AuthorizableToken
trait。
namespace App\Models; use Endropie\LumenMicroServe\Auth\Concerns\AuthorizableToken; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use Notifiable, AuthorizableToken; }
现在您可以在您的 User 模型上访问 token()
方法,例如
$user = User::findOrFail(1); $user->token();
您可能需要通过登录控制器或用户资源返回此令牌。
在其他服务上进行授权。
- 发布配置文件。这将创建一个用于基本配置选项的
config/jwt.php
文件。
php artisan vendor:publish --provider="Endropie\LumenMicroserve\AuthTokenServiceProvider" --tag="config"
- 使用这个新的守卫保护您的 API 路由。
$router->group(['middleware' => 'auth'], function () use ($router) { $router->get('/user', function() { return auth()->user()->toArray(); }); });
现在您可以在您的用户模型上访问 auth()
辅助函数,例如
auth()->user();
您可能需要通过登录控制器或用户资源返回此令牌。
配置
在发布配置后,此包通过 config/jwt.php
文件提供简单的配置。让我们回顾每个配置选项。
secret-key
- 编码/解码令牌时使用的密钥。它应该是一个随机字符串。记住,如果您更改此密钥,所有活动的 JWT 令牌都将失效。hash-algo
- 哈希算法。支持的算法列表在配置文件中。您可能不需要更改此设置。expiration
- 默认令牌过期时间(分钟)。您可以将它设置为null
,令牌将永远不会过期。claims
- 将应用于所有令牌的默认声明(除了解码和验证所需的必需声明)。
这是所有令牌的全局配置。除此之外,库还通过 HasJwt
trait 辅助方法提供每个模型的本地配置。
getJwtId()
- 它应该返回用于从数据库检索该模型的模型唯一键。默认为主键。getJwtValidFromTime()
- 它应该返回null
(默认)或一个 Carbon 实例。如果您想创建不立即生效的令牌,可以使用它。getJwtValidUntilTime()
- 它应该返回null
或一个 Carbon 实例。这设置了 JWT 过期时间,默认情况下使用配置文件中的expiration
选项。getJwtCustomClaims()
- 应返回一个键/值数组,包含您希望作为令牌一部分的额外自定义声明。默认为空数组。
您还可以直接在 token()
方法上使用配置,这会覆盖所有其他配置,例如
$user->token([ 'id' => $user->email, 'valid_from' => now()->addHour(), 'valid_until' => now()->addDay(), 'claims' => [ 'extra1' => 'foo', 'extra2' => 'bar' ] ]);
您不需要覆盖所有配置选项,只需更改您希望更改的选项即可。
请求
令牌可以通过以下三种方式之一从请求中提取
- 从
Authorization: Bearer {token}
标头(最常见)。 - 从 URL 查询参数
token
。 - 使用
token
字段名称从请求体中。