usmonaliyev / laravel-redis-auth
Laravel 使用 Redis 数据库进行授权和认证。
Requires
- php: ^7.4|^8.1
- predis/predis: ^2.1
This package is auto-updated.
Last update: 2024-09-04 09:16:38 UTC
README
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 许可证发布。