tobya/lassi

在网站之间同步用户

v0.5 2022-06-28 07:01 UTC

This package is auto-updated.

Last update: 2024-09-07 21:13:10 UTC


README

在 Laravel Web 应用之间同步用户

Laravel Auth 同步登录

背景

在我们公司,我们在多个网站上有多个应用程序。它们执行不同的功能,将它们分散在不同的域上是一种方便的做法。一些可供我们的员工使用,一些可供客户使用,一些可供两者使用。我们有一个中央应用程序,其中包含每个人的客户记录(这可以轻松地转换为用户记录)。

登录多个网站变得越来越痛苦,因为我不想让人们在每个网站上创建单独的账户,并找出谁是客户,谁是员工,并按需分配角色。所以我写了 Lassi。它不是 OAuth,也不是 SSI,许多人可能会认为这不是一个好主意,但它解决了我的问题。

概述

Lassi(Laravel Auth 同步登录)使用客户端-服务器模型,有一个用户账户仓库,该仓库定期被请求并同步到客户端。

php artisan lassi:sync

将同步自上次同步以来已更改的所有用户。

默认情况下,同步过程将从服务器复制用户表中的所有字段到客户端。包括...

  • name
  • email
  • email_verified_at
  • password
  • lassi_user_id(lassi用户的UUID)

以下字段将不会复制 remember_token, created_at, updated_at, current_team_id

服务器用户表和客户端用户表中都存在的 任何 字段都将被复制。

您可以指定 lassi 是否要忽略其他字段。

使用方法

要求

目前需要使用 Sanctum 令牌来允许访问 lassi 路由。具有 API 令牌的用户必须具有 lassi_read 权限。

服务器

首先在您的服务器上安装 Lassi

composer require tobya/lassi

然后运行迁移并发布 Lassi 供应商文件。

php artisan migrate
php artisan vendor:publish --tag=lassi

客户端

在您的客户端上安装 Lassi

composer require tobya/lassi

然后运行迁移并发布 Lassi 供应商文件。

php artisan migrate
php artisan vendor:publish --tag=lassi

在 .env 中设置所需的环境变量

LASSI_SERVER=https://user.for.server.example.com
LASSI_TOKEN=apitokenofuseryouwishtoconnectas-musthavelassi-read-permission

运行同步

php artisan lassi:sync

此命令将同步服务器上的所有用户到客户端。再次运行该命令将同步上次运行以来已更改的任何用户。

自定义检索器

默认情况下,服务器将返回自上次指定日期以来已更改(updated_at)的所有用户。如果您想返回不同的用户集,可以提供自定义用户检索器。

只需创建一个新类,该类实现 \Lassi\Interfaces\LassiRetriever 接口,它有一个返回用户集合的 Users 函数。

class GoldenRetriever implements \Lassi\Interfaces\LassiRetriever
{

    public function Users($LastSyncDate, $extradata = null){
        return Users::where('updated_at','>', $LastSyncDate)->where('email','like','%@example.com')->get();   
    }
 }
 

并在 config\lassi.php 中设置它

return [

    'server' => [
        ....
        'retriever' =>  App\Classes\GoldenRetriever::class,
        
        ],

添加附加字段

有时可能需要提供与检索的用户相关的附加信息。例如,可能有一个从单独的表中检索的内部 ID。这可以在这一阶段添加。

class GoldenRetriever implements \Lassi\Interfaces\LassiRetriever
{

    public function Users($LastSyncDate, $extradata = null){
        $RetrievedUsers = Users::where('updated_at','>', $LastSyncDate)->where('email','like','%@example.com')->get();   
        $RetrievedUsers = $RetrievedUsers->map(function($user){
          $user->specialid = $user->specialModel->getid();
          return $user;
        });
        return $RetrievedUsers;
    }
 }
 

自定义设置器

默认情况下,Lassi 将为每个返回的用户在客户端创建一个用户。如果您想选择是否创建特定的用户,则可以实施自定义设置器接口 \Lassi\Interfaces\LassiSetter

自定义速率限制器

版本2:如果您需要设置在更新大量作业时对服务器的请求速率限制,只需创建一个名为 lassi-updates 的速率限制器即可,它将被应用。