curio / sdclient
sdlogin 客户端
Requires
- guzzlehttp/guzzle: ^7.0
- lcobucci/jwt: 4.0.4
Requires (Dev)
- laravel/pint: ^1.14
This package is auto-updated.
Last update: 2024-09-04 12:26:34 UTC
README
一个用于与 🔐 sdlogin OpenID 连接服务器一起使用的 Laravel 包。
🚀 使用此包
警告
请确保您的应用程序正在使用 https,以防止令牌、机密等不受欢迎的暴露。
要在项目中使用 sdclient
-
在您的 Laravel 项目中运行:
composer require curio/sdclient
-
在您的 .env 文件中设置以下密钥
SD_CLIENT_ID
SD_CLIENT_SECRET
SD_API_LOG
(可选)- 默认:
no
- 设置为
yes
以使 SdClient 将所有访问令牌和刷新令牌的使用记录到默认日志通道。
- 默认:
SD_APP_FOR
(可选)- 默认:
teachers
- 此密钥确定学生是否可以登录到您的应用程序。
- 可以是以下之一
- 默认:
all
: 每个人都可以登录,您可以使用守卫或中间件来限制访问。teachers
: 学生将完全被阻止,当他们尝试登录时不会创建任何用户。SD_USE_MIGRATION
(可选)- 默认:
yes
- 设置为 no 如果您想要使用自己的迁移而不是此包提供的用户迁移
- 默认:
SD_SSL_VERIFYPEER
(可选)- 默认:
yes
- 设置为
no
如果您想禁用 SSL 验证。这仅在开发期间以及在受信任的网络中推荐。
- 默认:
-
修改您的用户模型并添加以下行:
public $incrementing = false;
-
(推荐) 从您的应用程序中删除任何默认的用户迁移,因为 SdClient 将与其冲突。请不要删除用户模型。如果您想继续使用自己的迁移,在您的 .env 文件中设置:
SD_USE_MIGRATION=no
。注意,与默认用户迁移不同,SD 用户的主键是字符串。指向用户表的任何外键也应为字符串类型。
-
最后,运行
php artisan migrate
。
阅读以下必需实现,了解如何将用户重定向到登录服务器以及如何捕获登录后的重定向。
🔨 必需实现
注意
SdClient 与 Laravel 的 make:auth
命令不兼容。
1️⃣ 允许用户登录
将用户重定向到 http://yoursite/sdclient/redirect
。从这里 sdclient
将将您的用户发送到 sdlogin 进行身份验证。
示例
实现一个命名路由,将按钮或直接重定向到
/sdclient/redirect。
Route::get('/login', function() { return redirect('/sdclient/redirect'); })->name('login');
2️⃣ 捕获登录后的重定向
sdlogin 服务器将询问用户是否允许您的应用程序访问其数据。用户做出选择后,他们将被重定向到您的应用程序中的 /sdclient/ready
或 /sdclient/error
路由。
处理成功 (/sdclient/ready
)
与 sdlogin 确认成功登录后,sdclient
包将您重定向到 /sdclient/ready
。
示例
在应用程序的
routes/web.php
文件中定义一个路由来处理此操作Route::get('/sdclient/ready', function() { return redirect('/educations'); })
处理错误 (/sdclient/error
)
如果用户拒绝访问您的应用程序或发生其他错误,用户将被重定向到 /sdclient/error
。错误和错误描述将存储在会话中(分别作为 sdclient.error
和 sdclient.error_description
)。
示例
在应用程序的
routes/web.php
文件中定义一个路由来处理此操作Route::get('/sdclient/error', function() { $error = session('sdclient.error'); $error_description = session('sdclient.error_description'); return view('errors.sdclient', compact('error', 'error_description')); // or simply: // return 'There was an error signing in: ' . $error_description . ' (' . $error . ')<br><a href="/login">Try again</a>'; })
3️⃣ 登出
将用户发送到 /sdclient/logout
。
注意
当前无法实现真正的登出。如果您从应用程序中注销,但仍然登录到sdlogin-服务器,这不会有任何效果。这是因为sdlogin-服务器是一个单点登录服务器,它设计用来让您登录使用它的所有应用程序。
📈 SdApi
除了是中央登录服务器外,login.amo.rocks还公开了一个API。请注意,此API目前尚未文档化,尽管有选项可以探索API
- 请参阅sdlogin的routes/api.php文件。
- 在apitest.curio.codes上尝试。
SdClient API接口
通过SdClient调用API的示例
namespace App\Http\Controllers; use \Curio\SdClient\Facades\SdApi; class MyController extends Controller { // This method should be protected by the auth-middleware public function index() { $users = SdApi::get('users'); return view('users.index')->with(compact('users')); } }
已知'bug': 目前SdApi类没有检查令牌是否过期,而是在您使用它时随时刷新它。
SdApi::get($endpoint)
- 执行类似于
GET https://api.curio.codes/$endpoint
的HTTP请求。 - 此方法依赖于用户首先通过
sdclient
进行身份验证。仅从由auth中间件保护的路由和控制台中调用此方法。 - 返回Laravel集合
👷♀️ 贡献
我们欢迎社区的贡献。有关更多信息,请参阅贡献指南。