zanichelli / idp-extensions
用于与 Zanichelli 身份提供者交互的类
Requires
- guzzlehttp/guzzle: ~7.0
- laravel/framework: ^6|^7|^8|^9|^10|^11
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^3.8
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-08-30 15:15:32 UTC
README
这是一个与 laravel-jwt-idp (Github: https://github.com/ZanichelliEditore/laravel-jwt-idp) 一起使用的 Laravel 扩展包。
如何在项目中集成包
步骤 1 - 使用 Composer 安装
composer require zanichelli/idp-extensions
注意:
您应使用标签而不是分支名称(例如 "zanichelli/idp-extensions:V1.0.0" 或 "zanichelli/idp-extensions:dev-{branch-name}" )
步骤 2 - .env 文件
在您的 .env 文件的底部添加以下行
IDP_URL=https://idp.zanichelli.it/loginForm
IDP_TOKEN_URL=https://idp.zanichelli.it/v1/user
IDP_LOGOUT_URL=https://idp.zanichelli.it/v1/logout
IDP_COOKIE_NAME=token
如果您需要使用自己的登录表单(而不是 IDP 表单),请也添加此行
IDP_LOGIN_URL=https://idp.zanichelli.it/v4/login
步骤 3 - 编辑 auth.php 文件
按照以下方式编辑 config/auth.php
- 在
'defaults'
数组中,将'guard'
的值从'web'
更改为'z-session'
步骤 4 - 发布迁移
本包包含两个迁移,授权表和会话表。
php artisan vendor:publish
并选择 "zanichelli/idp-extension" 提供者
步骤 4.A - 发布迁移(重大变更)v3.0. 之后
本包包含三个迁移
- 授权表
- 会话表
- 授权表键更改(将 role_id 和 department_id 更改为 role_name 和 department_name)。
php artisan vendor:publish
使用以下命令将仅应用关于 role_id 和 department_id 的更改
php artisan vendor:publish --tag=grants-by-name-instead-of-id
使用
php artisan vendor:publish --tag=grants-by-name-instead-of-id --force
如果您需要覆盖授权表更改迁移。
步骤 5 - 创建路由中间件并保护您的路由
在 Kernel.php 文件中,将 "idp" 添加到您的 routeMiddleware
'idp' => \Zanichelli\IdpExtension\Http\Middleware\IdpMiddleware::class,
默认行为也会检索用户的权限,可以通过传递参数 without_permissions
来省略
Route::group(['middleware'=>'idp:without_permissions'],function(){ Route::get('/', function(){ return view('home'); }); });
将新的中间件 idp
添加到您的路由文件中(通常是 web.php
);代码如下
Route::group(['middleware'=>'idp'],function(){ Route::get('/', function(){ return view('home'); }); });
或者,第二个中间件读取 cookie,如果找到,检索用户数据并将其添加到请求中
'idp.user' => \Zanichelli\IdpExtension\Http\Middleware\AddIdpUserDataMiddleware::class,
扩展 IDP 中间件
为了编辑检索权限或向用户对象添加额外参数,您可以扩展默认的 IDP 中间件类。
类必须实现以下方法
-
retrievePermissions
:此方法接收 userId 和 roles 数组作为输入,这里必须检索基于角色的权限,以输出字符串数组作为权限; -
addExtraParametersToUser
:此方法允许您向给定的用户对象添加额外参数。
在创建类之后,在 kernel.php
文件中添加新的中间件类到 '$routeMiddleware'
数组中
'idp' => \App\Http\Middleware\IdpMiddleware::class,
IDP 注销
在 web.php
文件中创建一个注销路由,使用控制器中的 logout 方法。按照以下方式实现代码
Route::group(['middleware'=>'idp'],function(){ Route::get('logout', 'LoginController@logout'); });
然后定义 logout
use use Illuminate\Support\Facades\Auth; class LoginController extends Controller { ... public function logout() { return Auth::logout(); } }
基础
通过此集成,您可以使用一些 Laravel 功能来处理用户及其身份验证。 Auth
是 Laravel 为此目的提供的认证类,允许访问以下方法
Auth::check()
:如果用户已认证返回true
,否则返回false
Auth::guest()
:如果用户是访客返回true
,否则返回false
Auth::user()
:返回ZUser
类实例,否则返回null
Auth::id()
:如果已认证返回userId
,否则返回null
Auth::hasUser()
:如果当前会话中有一个 ZUser 返回true
,否则返回false
Auth::setUser($ZUser)
:将Zuser
设置到会话中Auth::attempt($credentials, $remember)
:尝试在不使用登录表单的情况下使用IDP进行登录,如果成功返回true
,否则返回false
Auth::logout()
:注销用户,返回redirect