@vestige06/medusa-auth-wechat
Version:
Medusa 微信小程序第三方登录认证插件
252 lines (194 loc) • 6.61 kB
Markdown
<p align="center">
<a href="https://www.medusajs.com">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/59018053/229103275-b5e482bb-4601-46e6-8142-244f531cebdb.svg">
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
<img alt="Medusa logo" src="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
</picture>
</a>
</p>
<h1 align="center">
Medusa 微信认证插件
</h1>
<h4 align="center">
<a href="https://docs.medusajs.com">Documentation</a> |
<a href="https://www.medusajs.com">Website</a>
</h4>
<p align="center">
Building blocks for digital commerce
</p>
<p align="center">
<a href="https://github.com/medusajs/medusa/blob/master/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="PRs welcome!" />
</a>
<a href="https://www.producthunt.com/posts/medusa"><img src="https://img.shields.io/badge/Product%20Hunt-%231%20Product%20of%20the%20Day-%23DA552E" alt="Product Hunt"></a>
<a href="https://discord.gg/xpCwq3Kfn8">
<img src="https://img.shields.io/badge/chat-on%20discord-7289DA.svg" alt="Discord Chat" />
</a>
<a href="https://twitter.com/intent/follow?screen_name=medusajs">
<img src="https://img.shields.io/twitter/follow/medusajs.svg?label=Follow%20@medusajs" alt="Follow @medusajs" />
</a>
</p>
## 简介
这是一个为 Medusa 电商系统开发的微信小程序第三方登录认证插件。支持微信小程序的静默登录和授权登录,让用户可以通过微信账号快速登录你的电商应用。
## 功能特性
- ✅ 微信小程序静默登录
- ✅ 微信小程序授权登录(获取用户信息)
- ✅ 自动创建客户账户
- ✅ JWT Token 认证
- ✅ 完整的错误处理
- ✅ TypeScript 支持
- ✅ 单元测试
## 兼容性
本插件兼容 Medusa v2.4.0 及以上版本。
## 安装和配置
### 1. 安装插件
```bash
npm install @vestige06/medusa-auth-wechat
```
### 2. 环境变量配置
在你的 `.env` 文件中添加微信小程序配置:
```bash
# 微信小程序配置
WECHAT_MINIPROGRAM_APP_ID=your_wechat_app_id
WECHAT_MINIPROGRAM_APP_SECRET=your_wechat_app_secret
```
### 3. Medusa 配置
在 `medusa-config.ts` 中配置认证模块:
```typescript
import { defineConfig, Modules } from "@medusajs/framework/utils"
module.exports = defineConfig({
projectConfig: {
http: {
authMethodsPerActor: {
customer: ["emailpass", "wechat"], // 添加微信认证
},
},
},
modules: [
{
resolve: "@medusajs/medusa/auth",
options: {
providers: [
{
resolve: "@medusajs/medusa/auth-emailpass",
id: "emailpass",
},
{
resolve: "@vestige06/medusa-auth-wechat",
id: "wechat",
options: {
appId: process.env.WECHAT_MINIPROGRAM_APP_ID,
appSecret: process.env.WECHAT_MINIPROGRAM_APP_SECRET,
},
},
],
},
},
],
})
```
## 使用方法
### 后端 API
插件会自动注册以下 API 端点:
```
POST /store/auth/wechat
```
请求体:
```json
{
"code": "微信登录凭证",
"userInfo": {
"nickName": "用户昵称",
"avatarUrl": "头像URL"
}
}
```
响应:
```json
{
"success": true,
"customer": {
"id": "客户ID",
"email": "wechat_openid@temp.com",
"first_name": "用户昵称"
},
"access_token": "JWT令牌",
"message": "微信登录成功"
}
```
### 前端集成(微信小程序)
参考 `examples/wechat-miniprogram.js` 文件中的完整示例。
#### 静默登录
```javascript
const wechatAuth = require('./utils/wechat-auth')
// 静默登录
const result = await wechatAuth.wechatSilentLogin()
if (result.success) {
console.log('登录成功', result.customer)
}
```
#### 授权登录
```javascript
// 授权登录(获取用户信息)
const result = await wechatAuth.wechatAuthLogin()
if (result.success) {
console.log('登录成功', result.customer)
}
```
#### 发送认证请求
```javascript
// 使用 token 发送请求
const userInfo = await wechatAuth.authenticatedRequest('/store/customers/me')
```
## 开发和测试
### 运行测试
```bash
npm test
```
### 构建插件
```bash
npm run build
```
### 开发模式
```bash
npm run dev
```
## 文件结构
```
src/
├── api/
│ └── store/
│ └── auth/
│ └── wechat/
│ └── route.ts # 微信认证 API 路由
├── providers/
│ ├── wechat-auth.ts # 微信认证提供者
│ └── __tests__/
│ └── wechat-auth.test.ts # 单元测试
examples/
└── wechat-miniprogram.js # 前端使用示例
```
## 注意事项
1. **微信小程序配置**:确保在微信公众平台配置正确的服务器域名
2. **HTTPS 要求**:生产环境必须使用 HTTPS
3. **Token 安全**:妥善保管 JWT Token,建议设置合理的过期时间
4. **错误处理**:前端应该处理网络错误和认证失败的情况
## 许可证
MIT License
## 贡献
欢迎提交 Issue 和 Pull Request!
## 支持
如果你在使用过程中遇到问题,可以:
1. 查看 [Medusa 官方文档](https://docs.medusajs.com)
2. 提交 [GitHub Issue](https://github.com/your-repo/issues)
3. 加入 [Medusa Discord 社区](https://discord.com/invite/medusajs)
Learn more about [Medusa’s architecture](https://docs.medusajs.com/learn/introduction/architecture) and [commerce modules](https://docs.medusajs.com/learn/fundamentals/modules/commerce-modules) in the Docs.
## Community & Contributions
The community and core team are available in [GitHub Discussions](https://github.com/medusajs/medusa/discussions), where you can ask for support, discuss roadmap, and share ideas.
Join our [Discord server](https://discord.com/invite/medusajs) to meet other community members.
## Other channels
- [GitHub Issues](https://github.com/medusajs/medusa/issues)
- [Twitter](https://twitter.com/medusajs)
- [LinkedIn](https://www.linkedin.com/company/medusajs)
- [Medusa Blog](https://medusajs.com/blog/)