mirror of
https://github.com/woodchen-ink/Q58Connect.git
synced 2025-07-18 05:51:55 +08:00
154 lines
3.8 KiB
Markdown
154 lines
3.8 KiB
Markdown
# Discourse Connect
|
||
|
||
这是一个基于 [Next.js](https://nextjs.org/) 的项目,实现了使用 Discourse SSO (Single Sign-On) 用户系统的 OAuth 认证功能。
|
||
|
||
## 项目概述
|
||
|
||
本项目提供了一个 OAuth 认证系统,允许其他应用程序使用 Discourse 论坛的用户账号进行身份验证。这样可以让用户使用他们已有的 Discourse 账号登录到您的应用程序,无需创建新的账号。
|
||
|
||
主要特性:
|
||
|
||
- 基于 Discourse SSO 的用户认证
|
||
- OAuth 2.0 协议支持
|
||
- 使用 Next.js 框架构建,提供良好的性能和开发体验
|
||
|
||
## 开始使用
|
||
|
||
首先,运行开发服务器:
|
||
|
||
```bash
|
||
pnpm dev
|
||
# 或
|
||
pnpm turbo
|
||
```
|
||
|
||
在浏览器中打开 [http://localhost:3000](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. 在项目根目录下,运行以下命令启动服务:
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
这将构建并启动 Web 应用和 PostgreSQL 数据库服务。
|
||
|
||
3. 应用将在 http://localhost:3000 上运行。
|
||
|
||
4. 要停止服务,运行:
|
||
|
||
```bash
|
||
docker-compose down
|
||
```
|
||
|
||
### 使用 Vercel 部署
|
||
|
||
另一种部署 Next.js 应用程序的简单方法是使用 [Vercel 平台](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme)。
|
||
|
||
查看我们的 [Next.js 部署文档](https://nextjs.org/docs/deployment) 了解更多详情。
|
||
|
||
## OAuth 2.0 接口
|
||
|
||
本项目实现了基于 OAuth 2.0 协议的认证系统。以下是主要的 OAuth 接口及其使用说明:
|
||
|
||
### 1. 授权请求
|
||
|
||
**端点:** `/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. 获取访问令牌
|
||
|
||
**端点:** `/api/oauth/access_token`
|
||
|
||
**方法:** POST
|
||
|
||
**参数:**
|
||
|
||
- `code`: 从授权请求中获得的授权码
|
||
- `redirect_uri`: 必须与授权请求中的 redirect_uri 相同
|
||
|
||
**响应:**
|
||
|
||
```json
|
||
{
|
||
"access_token": "at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||
"expires_in": 604800,
|
||
"token_type": "bearer"
|
||
}
|
||
```
|
||
|
||
### 3. 获取用户信息
|
||
|
||
**端点:** `/api/oauth/user`
|
||
|
||
**方法:** GET
|
||
|
||
**请求头:**
|
||
|
||
- `Authorization: Bearer {access_token}`
|
||
|
||
**响应:**
|
||
|
||
```json
|
||
{
|
||
"id": "user_id",
|
||
"email": "user@example.com",
|
||
"username": "username",
|
||
"admin": false,
|
||
"avatar_url": "https://example.com/avatar.jpg",
|
||
"name": "User Name"
|
||
}
|
||
```
|
||
|
||
### 使用流程
|
||
|
||
1. 将用户重定向到授权页面(`/oauth/authorize`)。
|
||
2. 用户授权后,您的应用将收到一个授权码。
|
||
3. 使用授权码请求访问令牌(`/api/oauth/access_token`)。
|
||
4. 使用访问令牌获取用户信息(`/api/oauth/user`)。
|
||
|
||
注意:确保在生产环境中使用 HTTPS 来保护所有的 OAuth 请求和响应。
|
||
|
||
## 贡献
|
||
|
||
欢迎贡献代码、报告问题或提出改进建议。
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证。详情请见 [LICENSE](LICENSE) 文件。
|