跳到主要内容

微信登录

微信登录是基于微信开放平台OAuth2.0协议的第三方认证方式,通过扫码登录和用户信息获取实现与微信用户体系的无缝集成。它负责微信用户身份验证、账户绑定管理和登录状态维护,支持前后端分离架构和完整的用户认证流程。

微信登录元素分层结构为Meta(auths.loginTypes.Meta) → Type(auths.loginTypes.WeChatType) → 实例,开发者可通过JitAi的可视化开发工具快捷地创建微信登录实例元素。

微信登录基于标准OAuth2.0认证流程,用户通过微信客户端扫码授权后,系统获取访问令牌和用户标识,完成身份验证和账户关联。支持用户绑定、解绑操作和多应用场景的身份管理。

当然,开发者也可以创建自己的Type元素,或者在自己的App中改写JitAi官方提供的auths.loginTypes.WeChatType元素,以实现自己的封装。

快速开始

创建实例元素

目录结构

推荐目录结构
auths/
└── loginTypes/
└── MyWeChatLogin/ # 实例元素名称,可自定义
├── e.json # 元素定义文件
└── MyWeChatLogin.json # 业务配置文件,文件名与实例元素名称一致

e.json文件

e.json配置示例
{
"type": "auths.loginTypes.WeChatType",
"title": "微信登录",
"appSecret": "您的微信应用密钥",
"backendBundleEntry": ".",
"frontBundleEntry": "./MyWeChatLogin.json"
}

业务配置文件

MyWeChatLogin.json配置示例
{
"authConfig": {
"appId": "您的微信应用ID",
"appSecret": "您的微信应用密钥"
}
}

调用示例

获取微信登录实例并使用
# 获取微信登录实例
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")

# 获取登录配置信息
login_config = wechat_auth.getLoginConfig()

# 处理微信扫码回调,获取登录码
login_result = wechat_auth.getLoginCode("微信返回的code")

# 绑定用户微信账号
wechat_auth.bind("用户ID", "微信返回的code")

元素配置

e.json配置

配置项类型对应原生类型必填说明
typeStextstr固定值:auths.loginTypes.WeChatType
titleStextstr登录方式显示名称
appSecretStextstr微信应用密钥,用于服务端验证
backendBundleEntryStextstr后端入口,固定值:"."
frontBundleEntryStextstr前端配置文件路径,通常为"./配置文件名.json"

业务配置文件配置

配置项类型对应原生类型必填说明
authConfig.appIdStextstr微信开放平台应用ID
authConfig.appSecretStextstr微信开放平台应用密钥

方法

getLoginConfig

获取登录配置信息,用于前端展示登录选项。

参数详解

无参数

返回值

字段类型对应原生类型说明
isActiveBooleanbool登录方式是否启用
authTypeStextstr认证类型标识
authConfig.appIdStextstr微信应用ID

使用示例

获取登录配置
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
config = wechat_auth.getLoginConfig()
print(config)
# 输出: {"isActive": True, "authType": "WeChatType", "authConfig": {"appId": "wx123456"}}

getLoginCode

处理微信OAuth回调,获取系统登录码。

参数详解

参数名类型对应原生类型必填说明
codeStextstr微信OAuth回调返回的授权码

返回值

字段类型对应原生类型说明
loginCodeStextstr系统登录码
corpListJitListlist用户关联的组织列表

使用示例

处理微信登录回调
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
try:
result = wechat_auth.getLoginCode("001234567890abcdef")
print(f"登录码: {result['loginCode']}")
print(f"组织列表: {result['corpList']}")
except Exception as e:
print(f"登录失败: {e}")

bind

绑定用户微信账号。

参数详解

参数名类型对应原生类型必填说明
userIdStextstr系统用户ID
codeStextstr微信OAuth授权码

返回值

字段类型对应原生类型说明
successBooleanbool固定返回True,表示操作成功
messageStextstr固定返回"操作成功"

使用示例

绑定微信账号
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
try:
result = wechat_auth.bind("user123", "001234567890abcdef")
print("微信账号绑定成功")
except Exception as e:
print(f"绑定失败: {e}")

unbind

解绑用户微信账号。

参数详解

参数名类型对应原生类型必填说明
userIdStextstr系统用户ID

返回值

字段类型对应原生类型说明
successBooleanbool固定返回True,表示操作成功
messageStextstr固定返回"操作成功"

使用示例

解绑微信账号
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
result = wechat_auth.unbind("user123")
print("微信账号解绑成功")

getUserAuthInfo

获取用户微信认证信息。

参数详解

参数名类型对应原生类型必填说明
authObjRowDatadict微信认证数据对象

返回值

字段类型对应原生类型说明
isActiveBooleanbool认证是否有效

使用示例

获取用户认证信息
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
# 从认证模型获取用户数据
auth_model = app.getElement("auths.loginTypes.WeChatType.WeChatAuthModel")
auth_obj = auth_model.get(filter="Q(userId='user123')", orderList=[])

auth_info = wechat_auth.getUserAuthInfo(auth_obj)
print(f"认证状态: {auth_info['isActive']}")

属性

authType

认证类型标识,固定值为"WeChatType"。

authConfig

微信应用配置信息,包含appId和appSecret。

isActive

登录方式启用状态,布尔值类型。

高级特性

自定义认证模型

微信登录使用内置的WeChatAuthModel存储用户认证信息,包含以下字段:

WeChatAuthModel字段结构
# 微信认证模型字段
auth_model = app.getElement("auths.loginTypes.WeChatType.WeChatAuthModel")

# 主要字段说明
# id: 主键ID (AutoInt)
# appId: 微信应用ID (Stext)
# userId: 系统用户ID (Stext)
# openId: 微信用户openId (Stext)
# unionId: 微信用户unionId (Stext)

前端登录组件集成

微信登录Type元素提供了完整的前端登录组件,支持扫码登录界面和状态管理:

前端组件配置示例
# 获取前端登录组件配置
wechat_auth = app.getElement("auths.loginTypes.MyWeChatLogin")
frontend_config = {
"componentType": "WeChatLogin",
"appId": wechat_auth.authConfig["appId"],
"redirectUri": "https://yourdomain.com/auth/callback",
"scope": "snsapi_login"
}

# 在页面中使用登录组件时的配置
login_component_props = {
"authType": "WeChatType",
"config": frontend_config,
"onSuccess": "handleLoginSuccess",
"onError": "handleLoginError"
}