兔兔答题目前支持多种登录方式,如常见的账号和密码、短信验证和微信code登录。由于个人主体是无法通过微信手机号验证的方式,进一步获取到用户的手机号,推荐可以使用用户输入的方式进行获取。
1、如果是通过微信小程序授权code的方式进行登录,则对用户的openid进行校验,一个openid对应一个用户。如需要用户绑定手机号,则需要再用户登录成功之后,某些特定的业务场景下,要求用户强制绑定手机号。
2、如果是通过手机号+验证码,或者是账号密码登录这两种登录方式在用户登录成功之后,是没有用户的openid记录的,因此需要走绑定用户小程序的openid接口。
WARNING
不管是用什么方式登录,系统对用户识别的唯一标识就是手机号。个人主体的微信小程序,如果不需要绑定手机号,则直接走微信小程序code登录接口即可,如果是需要绑定手机号, 则通过微信小程序的code登录成功之后,再绑定用户的手机号。如果是企业主体,按理登录方式也应该如此。如果是单纯通过手机号、账号密码登录的方式,需要使用小程序的某些接口,务必在登录成功之后,调用绑定小程序openid接口。 一定需要注意的是,不要把这种绑定关系分开处理。例如一个新用户第一次使用时,是通过微信小程序code登录,并且没有执行绑定手机号的操作,用户将小程序的登录状态清除,然后在通过手机号的方式登录,这时候就会创建两条数据。要解决这种办法,就需要用户在登录成功之后,并且处于登录有效期内进行绑定。
上面提到的情况,概率可能会非常的小,但还是希望开发者在处理该逻辑是注意。最好是在开发之前,跟业务方确定好具体的登录方式,减少出现脏数据的风险。
code登录
微信小程序在调用登录接口时,会返回一个code,将该code传递给服务端,服务端在调用微信登录接口,获取到用户的openid。系统会根据openid是否存在,来判断用户是否已经存在。如果用户openid已经存在,则直接返回用户已经存在的基础信息,如果不存在则自动创建一条新记录。
请求方法:POST
是否鉴权:否
请求编码:Content-Type:application/x-www-form-urlencoded
响应编码:Content-Type:application/json;charset=UTF-8
请求地址:index/login/wxLogin
请求参数:
参数名 | 参数类型 | 是否必填 | 参数说明 | 示例值 |
---|---|---|---|---|
wxCode | string | 是 | 小程序登录返回的code |
- 成功示例:
{
"data": {
"login_token": "d891b9b3c4a16e454fd7310bfef4391b",
"nickname": "兔兔答题",
"avatar": "https://www.tutudati.com/uploads/images/20231028/20231028132405e042f8860.png",
"sn": "aidkd12kdf",
"mobile_bind_way" => "",
"need_bind_mobile" => "",
},
"code": 100,
"msg": "请求成功"
}
参数名 | 参数类型 | 是否必有 | 参数说明 | 示例值 |
---|---|---|---|---|
login_token | string | 是 | 登录token | 见上述示例 |
nickname | string | 是 | 用户昵称 | 见上述示例 |
avatar | string | 是 | 用户头像 | 见上述示例 |
sn | string | 是 | 用户唯一标识 | 见上述示例 |
mobile_bind_way | int | 是 | 手机号绑定方式1微信自带2短信验证码 | 见上述示例 |
need_bind_mobile | int | 是 | 是否需要绑定手机号1是2否 | 2 |
- 失败示例:
{
"code": 101,
"data": [],
"msg": "系统错误"
}