24slides / auth-connector
Requires
- php: >=7.1
- ext-json: *
- firebase/php-jwt: ^6.0
- guzzlehttp/guzzle: ^7
- illuminate/support: ^5|^6|^7|^8|^9
Requires (Dev)
- mockery/mockery: ^1.3.1
- orchestra/testbench: ~3.8.0
- phpunit/php-code-coverage: ^6.0
- phpunit/phpunit: ^7
- squizlabs/php_codesniffer: ^2.3
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.28
- 1.1.27
- 1.1.26
- 1.1.25
- 1.1.24
- 1.1.23
- 1.1.22
- 1.1.21
- 1.1.20
- 1.1.19
- 1.1.18
- 1.1.17
- 1.1.16
- 1.1.15
- 1.1.14
- 1.1.13
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- dev-master / 1.0.x-dev
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-hotfix/1.4.0
- dev-TFL-45-fix-afghanistan-case
- dev-develop
- dev-release/1.1.16
- dev-feature/TFS-357-blacklist-users
- dev-hotfix/1.1.15
- dev-hotfix/1.1.12
- dev-hotfix/1.1.10
- dev-release/1.1.8
- dev-feature/assessment-users-integrity
- dev-hotfix/1.1.7
- dev-hotfix/1.1.6
- dev-hotfix/1.1.5
- dev-hotfix/1.1.4
- dev-hotfix/1.1.3
- dev-hotfix/1.1.1
- dev-hotfix/1.1.2
This package is auto-updated.
Last update: 2023-10-14 11:28:10 UTC
README
简化了与第三方服务的集成,包括HTTP客户端、身份验证守卫、同步、加密等现成解决方案。
入门指南
安装
- 定义以下环境变量,可以从服务器管理员处获取
JWT_SECRET=
SERVICE_AUTH_ENALBED=true
SERVICE_AUTH_URL=
SERVICE_AUTH_PUBLIC=
SERVICE_AUTH_SECRET=
- 通过Composer安装依赖项:
composer require 24slides/auth-connector
- 将包提供者添加到
config/app.php
'providers' => [ ... Slides\Connector\Auth\ServiceProvider::class,
提供者必须在
AuthServiceProvider
之后定义。
- 在
config/auth.php
中定义身份验证守卫
'guards' => [ ... 'authService' => [ 'driver' => 'authServiceToken', 'provider' => 'users', ], 'fallback' => [ 'driver' => 'session', 'provider' => 'users', ], ],
回退是你的默认身份验证守卫,当远程服务禁用时激活
- 将默认守卫替换为
authService
'defaults' => [ 'guard' => 'authService', 'passwords' => 'users', ],
如果您想启用IDE功能,如提示,则需要安装barryvdh/laravel-ide-helper。
- 发布配置和迁移
php artisan vendor:publish --provider Slides\Connector\Auth\ServiceProvider
- 运行已发布的迁移:
php artisan migrate
迁移向您的用户模型添加了
remote_id
列,该列应表示同步用户的标识符。
- 禁用身份验证cookie的加密,该cookie用于标识用户
app/Http/Middleware/EncryptCookies
/** * The names of the cookies that should not be encrypted. * * @var array */ protected $except = [ 'authKey' ];
- 禁用验证传入webhooks的CSRF令牌
app/Http/Middleware/VerifyCsrfToken
/** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'connector/webhook/*' ];
同步用户
要允许同步用户,请在您的User
模型上实现Slides\Connector\Auth\Sync\Syncable
接口。
有一个助手特质Slides\Connector\Auth\Concerns\UserHelper
,它涵盖了几乎所有方法,除了需要两位数字国家代码(ISO 3166-1 alpha-2)的retrieveCountry
方法。如果您有自定义属性,可以覆盖那里的方法。
身份验证处理器
处理器实现身份验证操作,并包装在数据库事务中。它只是一个层,用于保持逻辑在一个地方。
要生成处理器,您应该使用以下命令
php artisan make:auth-handlers
它将在App\Services\Auth
命名空间下为您创建一个名为AuthHandlers.php
的文件。
一旦创建了文件,您就应该将其添加到app/Services/AuthServiceProvider.php
中的boot
中。
$this->app['authService']->loadHandlers($this->app[\App\Services\Auth\AuthHandlers::class]);
您可以在这里找到处理器实现的示例。
回退
连接器提供通过设置SERVICE_AUTH_ENALBED=false
禁用远程服务的能力。这意味着登录、注销、密码重置等身份验证操作将仅本地处理。
与身份验证相关的逻辑
以下应用程序部分应替换为包提供的功能。
- 注册
- 登录
- 密码重置
注册
- 如果您遵循默认的Laravel用户注册实现,应在
App\Http\Controllers\Auth\RegistrationController
控制器中将特质Illuminate\Foundation\Auth\RegistersUsers
替换为Slides\Connector\Auth\Concerns\RegistersUsers
。
如果您有自定义注册逻辑,可以覆盖特质的函数。
- 删除
create()
方法,因为它由RegistersUsers
特质实现。
登录
如果您遵循默认的Laravel用户注册实现,应在App\Http\Controllers\Auth\LoginController
控制器中将特质Illuminate\Foundation\Auth\AuthenticatesUsers
替换为Slides\Connector\Auth\Concerns\AuthenticatesUsers
。
如果您有自定义登录逻辑,可以覆盖特质的函数。
密码重置
- 如果您遵循默认的Laravel用户注册实现,应替换以下文件中的特质
App\Http\Controllers\Auth\ForgotPasswordController
:将Illuminate\Foundation\Auth\SendsPasswordResetEmails
替换为Slides\Connector\Auth\Concerns\SendsPasswordResetEmails
App\Http\Controllers\Auth\ResetPasswordController
:将Illuminate\Foundation\Auth\ResetsPasswords
替换为Slides\Connector\Auth\Concerns\ResetsPasswords
如果您自定义了密码重置逻辑,您可以覆盖特性(trait)的方法。
- 如果您的
User
模型没有实现UserHelpers
特性,请在那里定义以下方法
/** * Send the password reset notification. * * @param string $token * * @return void */ public function sendPasswordResetNotification(string $token) { $this->notify(new \Slides\Connector\Auth\Notifications\ResetPasswordNotification($token)); }
- 通过添加到
routes/web.php
覆盖重置表单路由
Route::get('password/reset/{token}/{email}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
服务间的共享缓存
配置
步骤 1. 配置 Redis 连接
将以下内容添加到您的 config/database.php
'redis' => ... 'authService' => [ 'host' => env('SERVICE_AUTH_REDIS_HOST', '127.0.0.1'), 'password' => env('SERVICE_AUTH_REDIS_PASSWORD', null), 'port' => env('SERVICE_AUTH_REDIS_PORT', 6379), 'database' => env('SERVICE_AUTH_REDIS_CACHE_DB', 1), ] ],
步骤 2. 添加环境变量
添加以下环境变量。请向供应商索取它们的值。
SERVICE_AUTH_REDIS_HOST=
SERVICE_AUTH_REDIS_PASSWORD=
SERVICE_AUTH_REDIS_PORT=
SERVICE_AUTH_REDIS_CACHE_DB=1
使用方法
该功能的背后 API 非常简单,就像您使用 Laravel 的 Cache
门面一样。
全局键值参数
AuthService::cache('the-global-param', 'the-param-value'); AuthService::cache()->set('the-global-param', 'the-param-value'); AuthService::cache('the-global-param'); // the-param-value AuthService::cache()->get('the-param-param'); // the-global-value
存储/检索对象参数和值。
AuthService::cache()->set('emailing', 'sendOffers', true); AuthService::cache()->get('emailing', 'sendOffers'); // true
存储/检索与用户相关的参数。
AuthService::userCache($user->retrieveRemoteId(), 'receiveOffers', true); AuthService::userCache($user->retrieveRemoteId(), 'receiveOffers'); // true // Get all user's parameters AuthService::userCache($user->retrieveRemoteId()); // ['receiveOffers' => true]