endropie/lumen-micro-serve

v0.1.6 2022-02-23 13:43 UTC

This package is auto-updated.

Last update: 2024-09-25 22:18:37 UTC


README

Lumen 框架的简单微服务。

  • 在 Auth-Service 上进行身份验证。
  • 在其他服务上进行授权。
  • 模型可筛选 [即将推出]。
  • 模型 JSON 资源 [即将推出]。

安装

标准 Composer 包安装

composer require Endropie/LumenMicroServe

用法

在 Auth-Service 上进行身份验证

  1. 发布配置文件。这将创建一个用于基本配置选项的 config/jwt.php 文件。
php artisan vendor:publish --provider="Endropie\LumenMicroserve\AuthServiceProvider" --tag="config"
  1. 使用 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,
    ],
],
  1. 使用这个新的守卫保护您的 API 路由。
$router->group(['middleware' => 'auth'], function () use ($router) {
    $router->get('/user', function() {
        return auth()->user()->toArray();
    });
});
  1. 在您的 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();

您可能需要通过登录控制器或用户资源返回此令牌。

在其他服务上进行授权。

  1. 发布配置文件。这将创建一个用于基本配置选项的 config/jwt.php 文件。
php artisan vendor:publish --provider="Endropie\LumenMicroserve\AuthTokenServiceProvider" --tag="config"
  1. 使用这个新的守卫保护您的 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'
	]
]);

您不需要覆盖所有配置选项,只需更改您希望更改的选项即可。

请求

令牌可以通过以下三种方式之一从请求中提取

  1. Authorization: Bearer {token} 标头(最常见)。
  2. 从 URL 查询参数 token
  3. 使用 token 字段名称从请求体中。