zanichelli/idp-extensions

用于与 Zanichelli 身份提供者交互的类

v3.5.0 2024-08-30 13:57 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_namedepartment_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