wood chen 70e66294e3 feat: Add user access control and client management enhancements
- Introduced `allowedUsers` field to Client model for granular access control
- Implemented user filtering in authorization process
- Updated client edit form with allowed users configuration
- Enhanced dashboard and admin pages with improved user and client management
- Refactored client update and delete API routes
- Added form validation using Zod and react-hook-form
2025-02-20 01:49:52 +08:00
2024-09-22 23:32:49 +08:00

Discourse Connect

这是一个基于 Next.js 的项目,实现了使用 Discourse SSO (Single Sign-On) 用户系统的 OAuth 认证功能。

项目概述

本项目提供了一个 OAuth 认证系统,允许其他应用程序使用 Discourse 论坛的用户账号进行身份验证。这样可以让用户使用他们已有的 Discourse 账号登录到您的应用程序,无需创建新的账号。

主要特性:

  • 基于 Discourse SSO 的用户认证
  • OAuth 2.0 协议支持
  • 使用 Next.js 框架构建,提供良好的性能和开发体验

开始使用

首先,运行开发服务器:

pnpm dev
# 或
pnpm turbo

在浏览器中打开 http://localhost:3000 查看结果。

您可以通过修改 app/page.tsx 来开始编辑页面。当您编辑文件时,页面会自动更新。

配置

要使用此 OAuth 系统,您需要进行以下配置:

  1. 在您的 Discourse 论坛中启用 SSO 功能。
  2. 设置环境变量:
    • NEXT_PUBLIC_HOST_URL: 应用程序的主机 URL不要在末尾添加 "/"
    • DATABASE_URL: 数据库连接字符串
    • AUTH_SECRET: Next Auth 的密钥
    • DISCOURSE_HOST: 您的 Discourse 论坛 URL
    • DISCOURSE_SECRET: 在 Discourse 中设置的 SSO secret

部署

使用 Docker 部署

本项目支持使用 Docker 进行部署。以下是使用 Docker Compose 部署的步骤:

  1. 确保您的系统已安装 Docker 和 Docker Compose。

  2. 在项目根目录下,运行以下命令启动服务:

    docker-compose up -d
    

    这将构建并启动 Web 应用和 PostgreSQL 数据库服务。

  3. 应用将在 http://localhost:3000 上运行。

  4. 要停止服务,运行:

    docker-compose down
    

使用 Vercel 部署

另一种部署 Next.js 应用程序的简单方法是使用 Vercel 平台

查看我们的 Next.js 部署文档 了解更多详情。

OAuth 2.0 接口

本项目实现了基于 OAuth 2.0 协议的认证系统。以下是主要的 OAuth 接口及其使用说明:

1. 授权请求

端点: https://connect.q58.club/oauth/authorize

方法: GET

参数:

  • response_type: 必须为 "code"
  • client_id: 您的客户端 ID
  • redirect_uri: 授权后重定向的 URI
  • scope: (可选)请求的权限范围

示例:

/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=https://your-app.com/callback

2. 获取访问令牌

端点: https://connect.q58.club/api/oauth/access_token

方法: POST

参数:

  • code: 从授权请求中获得的授权码
  • redirect_uri: 必须与授权请求中的 redirect_uri 相同

响应:

{
  "access_token": "at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "expires_in": 604800,
  "token_type": "bearer"
}

3. 获取用户信息

端点: https://connect.q58.club/api/oauth/user

方法: GET

请求头:

  • Authorization: Bearer {access_token}

响应:

{
  "id": "user_id",
  "email": "user@example.com",
  "username": "username",
  "admin": false,
  "moderator": false,
  "avatar_url": "https://example.com/avatar.jpg",
  "name": "User Name",
  "groups": ["group1", "group2"]
}

响应字段说明:

  • id: 用户唯一标识
  • email: 用户邮箱
  • username: 用户名
  • admin: 是否是管理员
  • moderator: 是否是版主
  • avatar_url: 头像地址
  • name: 用户昵称
  • groups: 用户所属的论坛用户组列表

使用流程

  1. 将用户重定向到授权页面(/oauth/authorize)。
  2. 用户授权后,您的应用将收到一个授权码。
  3. 使用授权码请求访问令牌(/api/oauth/access_token)。
  4. 使用访问令牌获取用户信息(/api/oauth/user)。

注意:确保在生产环境中使用 HTTPS 来保护所有的 OAuth 请求和响应。

贡献

欢迎贡献代码、报告问题或提出改进建议。

许可证

本项目采用 MIT 许可证。详情请见 LICENSE 文件。

Description
一个基于 Discourse SSO (Single Sign-On) 用户系统的身份认证 OAuth Connect 系统。
Readme MIT 641 KiB
Languages
TypeScript 97.6%
CSS 1%
Dockerfile 0.7%
JavaScript 0.7%