Skip to main content

FastAPI auth: register, login (JWT), QQ/WeChat/phone binding

Project description

funlogin

用户注册、登录(JWT)、QQ/微信/手机绑定的 FastAPI 公共包。

安装

pip install -e .
# 或
uv pip install -e .

配置

通过环境变量(前缀 FUNLOGIN_)或 .env 配置:

变量 说明 默认
FUNLOGIN_DATABASE_URL 数据库连接 sqlite+aiosqlite:///./funlogin.db
FUNLOGIN_JWT_SECRET JWT 密钥 change-me-in-production
FUNLOGIN_JWT_ALGORITHM JWT 算法 HS256
FUNLOGIN_JWT_ACCESS_EXPIRE Access Token 过期秒数 3600
FUNLOGIN_JWT_REFRESH_EXPIRE Refresh Token 过期秒数 604800
FUNLOGIN_QQ_APP_ID QQ 互联 AppID
FUNLOGIN_QQ_APP_KEY QQ 互联 AppKey
FUNLOGIN_WECHAT_APP_ID 微信开放平台 AppID
FUNLOGIN_WECHAT_APP_SECRET 微信开放平台 Secret
FUNLOGIN_ALIYUN_ACCESS_KEY 阿里云 AccessKey
FUNLOGIN_ALIYUN_SECRET 阿里云 Secret
FUNLOGIN_ALIYUN_SMS_SIGN 短信签名
FUNLOGIN_ALIYUN_SMS_TEMPLATE 短信模板

快速集成

from fastapi import FastAPI
from funlogin import router

app = FastAPI()
app.include_router(router, prefix="/api")

# 运行: uvicorn your_app:app

API 接口(三方调用参考)

挂载后基础路径为 /api,以下接口均已联调通过。

统一响应格式:

{"code": 0, "data": {...}, "message": "ok"}
code 含义
0 成功
40001 业务错误(如用户名已存在)
40101 未登录 / Token 无效
40102 Token 已过期
40301 禁止访问
50001 服务端内部错误

需登录接口:请求头加 Authorization: Bearer <access_token>


认证 Auth

方法 路径 请求体 响应 data 示例
POST /api/auth/send-code {"phone": "13800138000"}
POST /api/auth/register {"username": "alice", "password": "123456"}{"email": "a@x.com", "password": "p"}{"phone": "138...", "code": "123456"} {"user_id": 1}
POST /api/auth/login 同 register,二选一 {"access_token": "...", "refresh_token": "..."}
POST /api/auth/refresh {"refresh_token": "..."} {"access_token": "...", "refresh_token": "..."}

绑定 Bind(需 JWT)

方法 路径 请求体 / 参数 响应 data 示例
POST /api/bind/phone/send-code {"phone": "13800138000"}
POST /api/bind/phone {"phone": "138...", "code": "123456"}
GET /api/bind/qq/authorize Query: redirect_uri=https://... {"url": "...", "state": "..."}
POST /api/bind/qq/callback {"code": "...", "redirect_uri": "..."}
GET /api/bind/wechat/authorize Query: redirect_uri=https://... {"url": "...", "state": "..."}
POST /api/bind/wechat/callback {"code": "..."}
GET /api/bind/list {"phone": ["138..."], "qq": [...], "wechat": [...]}

完整 OpenAPI 3.1 描述见 docs/openapi.json,可用于生成客户端或 Mock。

数据库

示例应用启动时会自动创建表。若自行集成,在应用启动时调用一次 await funlogin.core.database.init_db() 即可建表。

开发

pip install -e ".[test]"
pytest -v

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

funlogin-1.0.8-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file funlogin-1.0.8-py3-none-any.whl.

File metadata

  • Download URL: funlogin-1.0.8-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.2

File hashes

Hashes for funlogin-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c377238c047df22953b22050a957ce8a940a699ac30085256a84e0a096c5dccb
MD5 d37589bf4cae395e21785025e0175ad3
BLAKE2b-256 b980680347c245a56722274deb87448721da5dfda606afc1a47ae41949b64103

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page