curio/sdclient

sdlogin 客户端

v4.1.1 2024-03-02 12:14 UTC

This package is auto-updated.

Last update: 2024-09-04 12:26:34 UTC


README

一个用于与 🔐 sdlogin OpenID 连接服务器一起使用的 Laravel 包。

🚀 使用此包

警告

请确保您的应用程序正在使用 https,以防止令牌、机密等不受欢迎的暴露。

要在项目中使用 sdclient

  1. 在您的 Laravel 项目中运行: composer require curio/sdclient

  2. 在您的 .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 验证。这仅在开发期间以及在受信任的网络中推荐。
  3. 修改您的用户模型并添加以下行: public $incrementing = false;

  4. (推荐) 从您的应用程序中删除任何默认的用户迁移,因为 SdClient 将与其冲突。请不要删除用户模型。如果您想继续使用自己的迁移,在您的 .env 文件中设置:SD_USE_MIGRATION=no

    注意,与默认用户迁移不同,SD 用户的主键是字符串。指向用户表的任何外键也应为字符串类型。

  5. 最后,运行 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.errorsdclient.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

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集合

👷‍♀️ 贡献

我们欢迎社区的贡献。有关更多信息,请参阅贡献指南