这是一个基于 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 系统,您需要进行以下配置:
- 在您的 Discourse 论坛中启用 SSO 功能。
- 设置环境变量:
NEXT_PUBLIC_HOST_URL
: 应用程序的主机 URL(不要在末尾添加 "/")DATABASE_URL
: 数据库连接字符串AUTH_SECRET
: Next Auth 的密钥DISCOURSE_HOST
: 您的 Discourse 论坛 URLDISCOURSE_SECRET
: 在 Discourse 中设置的 SSO secret
本项目支持使用 Docker 进行部署。以下是使用 Docker Compose 部署的步骤:
-
确保您的系统已安装 Docker 和 Docker Compose。
-
在项目根目录下,运行以下命令启动服务:
docker-compose up -d
这将构建并启动 Web 应用和 PostgreSQL 数据库服务。
-
应用将在 http://localhost:3000 上运行。
-
要停止服务,运行:
docker-compose down
另一种部署 Next.js 应用程序的简单方法是使用 Vercel 平台。
查看我们的 Next.js 部署文档 了解更多详情。
本项目实现了基于 OAuth 2.0 协议的认证系统。以下是主要的 OAuth 接口及其使用说明:
端点: /oauth/authorize
方法: GET
参数:
response_type
: 必须为 "code"client_id
: 您的客户端 IDredirect_uri
: 授权后重定向的 URIscope
: (可选)请求的权限范围
示例:
/oauth/authorize?response_type=code&client_id=your_client_id&redirect_uri=https://your-app.com/callback
端点: /api/oauth/access_token
方法: POST
参数:
code
: 从授权请求中获得的授权码redirect_uri
: 必须与授权请求中的 redirect_uri 相同
响应:
{
"access_token": "at_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"expires_in": 604800,
"token_type": "bearer"
}
端点: /api/oauth/user
方法: GET
请求头:
Authorization: Bearer {access_token}
响应:
{
"id": "user_id",
"email": "[email protected]",
"username": "username",
"admin": false,
"avatar_url": "https://example.com/avatar.jpg",
"name": "User Name"
}
- 将用户重定向到授权页面(
/oauth/authorize
)。 - 用户授权后,您的应用将收到一个授权码。
- 使用授权码请求访问令牌(
/api/oauth/access_token
)。 - 使用访问令牌获取用户信息(
/api/oauth/user
)。
注意:确保在生产环境中使用 HTTPS 来保护所有的 OAuth 请求和响应。
欢迎贡献代码、报告问题或提出改进建议。
本项目采用 MIT 许可证。详情请见 LICENSE 文件。