Q58Connect/README.md

154 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) 文件。