Skip to main content

手机号登录

手机号登录是基于手机号码和短信验证码的认证方式,通过短信验证码验证实现用户身份认证。它负责验证码发送、验证码校验和用户登录,支持用户注册、手机号绑定/解绑、验证码有效期管理等安全功能。

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

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

快速开始

创建实例元素

目录结构

推荐目录结构
auths/loginTypes/
├── myPhoneLogin/
│ ├── e.json
│ └── phoneConfig.json

e.json文件

e.json配置示例
{
"type": "auths.loginTypes.PhoneType",
"title": "手机号登录",
"backendBundleEntry": ".",
"frontBundleEntry": "./phoneConfig.json",
"variables": [],
"appId": "your.app.id",
"extendType": "self"
}

业务配置文件

phoneConfig.json配置示例
{
"allowRegister": 1,
"smsFullName": "SMS.aliyunSms",
"smsConfig": {
"verifyTemplateCode": "SMS_123456789"
}
}

调用示例

基本使用示例
# 获取手机号登录元素
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

# 发送验证码
phone_auth.sendMessage("13800138000")

# 验证登录
result = phone_auth.getLoginCode("13800138000", "123456")
print(result) # {"loginCode": "xxx", "corpList": [...], "userId": "xxx"}

元素配置

e.json配置

配置项类型必填说明
titlestring元素显示名称
typestring固定值:auths.loginTypes.PhoneType

业务配置文件配置

配置文件名格式为{实例名称}.json,包含手机号登录的业务配置:

配置项类型必填说明
allowRegisternumber是否允许注册,0:不允许,1:允许,默认1
smsFullNamestring短信服务元素的fullName
smsConfigobject短信模板配置,包含verifyTemplateCode和verifySign

方法

sendMessage

发送短信验证码到指定手机号。

参数详解

参数名类型对应原生类型必填说明
phoneStextstr手机号码,支持中国大陆手机号格式

返回值

{
"code": 200,
"message": "success"
}

使用示例

发送验证码示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

# 发送验证码
try:
result = phone_auth.sendMessage("13800138000")
print("验证码发送成功")
except Exception as e:
print(f"发送失败: {e}")

getLoginCode

通过手机号和验证码验证登录,获取登录码。

参数详解

参数名类型对应原生类型必填说明
phoneStextstr手机号码
codeStextstr短信验证码

返回值

{
"loginCode": "登录码",
"corpList": [{"corpId": "企业ID", "corpName": "企业名称"}],
"userId": "用户ID"
}

使用示例

验证登录示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
result = phone_auth.getLoginCode("13800138000", "123456")
login_code = result["loginCode"]
user_id = result["userId"]
print(f"登录成功,用户ID: {user_id}")
except Exception as e:
print(f"登录失败: {e}")

register

注册新用户。

参数详解

参数名类型对应原生类型必填说明
phoneStextstr手机号码
codeStextstr短信验证码
nickStextstr用户昵称

返回值

返回创建的用户对象。

使用示例

用户注册示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
user = phone_auth.register("13800138000", "123456", "新用户")
print(f"注册成功,用户ID: {user.userId.value}")
except Exception as e:
print(f"注册失败: {e}")

bind

为当前用户绑定手机号认证。

参数详解

参数名类型对应原生类型必填说明
userIdStextstr用户ID
phoneStextstr手机号码
codeStextstr短信验证码

返回值

成功返回SUCCESS_RETURN。

使用示例

绑定手机号示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
phone_auth.bind("user123", "13800138000", "123456")
print("手机号绑定成功")
except Exception as e:
print(f"绑定失败: {e}")

unbind

解绑用户的手机号认证。

参数详解

参数名类型对应原生类型必填说明
userIdStextstr用户ID
codeStextstr手机号对应的短信验证码

返回值

成功返回SUCCESS_RETURN。

使用示例

解绑手机号示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
phone_auth.unbind("user123", "123456")
print("手机号解绑成功")
except Exception as e:
print(f"解绑失败: {e}")

checkMyMessage

校验当前用户的验证码,返回修改密码凭证。

参数详解

参数名类型对应原生类型必填说明
codeStextstr当前用户手机号的验证码

返回值

{
"ticket": "有效期5分钟的凭证"
}

使用示例

验证当前用户验证码示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
result = phone_auth.checkMyMessage("123456")
ticket = result["ticket"]
print(f"验证成功,票据: {ticket}")
except Exception as e:
print(f"验证失败: {e}")

updatePhone

更新用户手机号。

参数详解

参数名类型对应原生类型必填说明
userIdStextstr用户ID
ticketStextstrcheckMyMessage返回的票据
newPhoneStextstr新手机号
newCodeStextstr新手机号的验证码

返回值

成功返回SUCCESS_RETURN。

使用示例

更新手机号示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

try:
# 先获取票据
ticket_result = phone_auth.checkMyMessage("123456")
ticket = ticket_result["ticket"]

# 更新手机号
phone_auth.updatePhone("user123", ticket, "13900139000", "654321")
print("手机号更新成功")
except Exception as e:
print(f"更新失败: {e}")

属性

allowRegister

是否允许新用户注册。

类型: bool
说明: 从配置文件中读取,控制是否允许通过手机号注册新用户

authConfig

认证配置信息。

类型: dict
说明: 包含短信服务的配置信息,如accessKey、accessSecret等

高级特性

短信服务集成

手机号登录支持集成第三方短信服务,通过配置smsFullName指定短信服务元素。配置完成后,验证码发送将自动使用指定的短信服务,支持阿里云、腾讯云等主流短信平台。

使用示例

自定义短信服务示例
# 创建短信服务元素
sms_service = app.getElement("SMS.aliyunSms")

# 配置手机号登录使用该短信服务
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")
phone_auth.sendMessage("13800138000") # 自动使用配置的短信服务

验证码安全机制

系统内置多重安全机制确保验证码使用安全。

频率限制配置

  • 单个手机号45秒内只能发送一次验证码
  • 验证码有效期为5分钟
  • 验证码验证成功后自动删除

安全特性示例

验证码安全机制示例
phone_auth = app.getElement("auths.loginTypes.myPhoneLogin")

# 发送验证码
phone_auth.sendMessage("13800138000")

# 短时间内重复发送会抛出异常
try:
phone_auth.sendMessage("13800138000") # 45秒内重复发送
except Exception as e:
print("发送频率过快,请稍后再试")

# 验证码过期检查
import time
time.sleep(300) # 等待5分钟
try:
phone_auth.getLoginCode("13800138000", "123456") # 过期验证码
except Exception as e:
print("验证码已过期")