usmonaliyev/laravel-redis-auth

Laravel 使用 Redis 数据库进行授权和认证。

1.5.1 2024-09-04 09:14 UTC

README

Packagist Dependency Version Total Downloads Latest Version on Packagist Packagist License

Laravel Redis Auth 包是一个 Composer 包,它使用 Redis 数据库在 Laravel 应用程序中提供认证功能。它提供了与 Laravel 认证系统的无缝集成,同时利用 Redis 的速度和灵活性来存储用户凭据。

目的

我想构建微服务,并意识到我需要一个可以与所有微服务一起工作的认证服务。然后我创建了此包。如果您有三个微服务,您应该将此包安装到所有微服务中,并且应该将服务连接到同一个 Redis 数据库。当客户端发送请求以获取新的访问令牌时,您的其中一个服务创建访问令牌并将其存储到 Redis 数据库中。当客户端使用访问令牌向其他服务发送请求时,该服务可以从 Redis 数据库中检查令牌。

要求

  • PHP >= 7.4
  • predis/predis
  • Redis 数据库

安装

通过 Composer 安装包

composer require usmonaliyev/laravel-redis-auth

发布

发布包配置

php artisan vendor:publish --provider="Usmonaliyev\LaravelRedisAuth\RedisAuthServiceProvider"

用法

更新 .env 配置以使用缓存进行认证

REDIS_CLIENT=predis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

REDIS_PREFIX=''

您必须将 Usmonaliyev\LaravelRedisAuth\Traits\RedisAuthentication 特性添加到您的 App/Models/User 类中。

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Usmonaliyev\LaravelRedisAuth\Traits\RedisAuthentication;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, RedisAuthentication;

    ...

之后,您可以通过 App/Models/User 类的 createAuthToken 函数创建访问令牌。您可以使用能力创建令牌。该包将所有带能力的令牌存储在 Redis 数据库中。

$user = User::query()
    ->where('email', $request->string('email'))
    ->first();

$accessToken = $user->createAuthToken([
    'users.add',
    'users.show',
    'users.delete',
]);

您可以在您的控制器中使用 App/Models/User 类的 check 函数检查令牌的能力。如果用户没有能力,check 函数将抛出 Illuminate/Http/Exceptions/HttpResponseException

Auth::user()->check('users.add', "If you want to change error message!");

OR

auth()->user()->check('messages.show');

您可以通过向其中添加 auth 中间件来保护您的路由

Route::middleware('redis-auth')->group(function () {
    // Protected routes
});

config 文件夹中的 redis-auth.php 有配置。您可以更改它们。

    /**
     * Name of redis connection.
     *
     * Note that this name is listed in the redis section of your config/database.php
     */
    'connection' => env('REDIS_AUTH_CONNECTION', 'default'),

    /**
     * Name of selected hashing algorithm (i.e. "md5", "sha256", "haval160,4", etc..)
     * See hash_algos for a list of supported algorithms.
     */
    'algo' => env('REDIS_AUTH_ALGO', 'sha256'),

    /**
     * Secret key for creating a new token
     */
    'secret_key' => env('REDIS_AUTH_SECRET_KEY', 'laravel-redis-auth-secret-key'),

    /**
     * token_ttl represents the Token Time To Live, which defines the lifespan or expiration time of a token.
     */
    'token_ttl' => env('REDIS_AUTH_TOKEN_TTL', 3600 * 24),

    /**
     */
    'unauthorized_message' => env('UNAUTHORIZED_MESSAGE', 'Unauthorized...'),

贡献

欢迎贡献!如果您发现任何问题或对改进有建议,请打开一个问题或提交一个拉取请求。

许可证

此包是开源的,并按 MIT 许可证发布。