tobya / lassi
在网站之间同步用户
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_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
的速率限制器即可,它将被应用。