您描述的流程结合了微信小程序的认证机制和手机号验证码登录。这种方式有效地利用了微信提供的安全认证体系,并通过手机号验证码进一步加强用户身份验证。这个流程大致可以分为以下几个步骤:
- 用户输入手机号并获取验证码:用户在小程序的登录界面输入手机号,并请求发送验证码。小程序后端将验证码发送到用户的手机。
- 用户输入验证码:用户收到验证码后,在小程序提供的界面上输入这个验证码。
- 调用
uni.login
获取code
:在用户输入验证码的同时,小程序调用uni.login
方法来获取微信的登录凭证(code)。uni.login
是 UniApp 提供的用于登录微信小程序的 API。 - 小程序后端使用
code
获取openid
:小程序后端使用从uni.login
获得的code
,调用微信提供的code2Session
接口来获取用户的openid
。openid
是用户在当前小程序的唯一标识符。 - 使用
openid
和验证码进行登录:小程序后端接收到用户的openid
和输入的验证码后,进行验证。它会检查验证码的正确性,并且确认该openid
是否已经与一个账户关联。 - 创建或验证用户账户:如果验证成功,并且是新用户,小程序后端可以创建一个新的账户并将其与
openid
关联,并返回 token。如果是已有用户,则直接返还 token
这种方式结合了微信的安全认证和手机号验证,提供了一个相对安全且用户友好的登录流程。同时,它也遵守了微信的用户隐私规则,因为小程序只能通过 openid
来识别用户,而无法直接获取到更敏感的个人信息。
总结下流程:
- 输入手机号,调用后端接口,获取验证码
- 点击登录。调用 uni.login 获取 code,通过 code 调用后端接口获取 openid,调用登录接口,传入 openid,手机号,验证码,得到 token
uni.login({
success: (res) => {
// 拿到code
const code = res.code;
// 拿到openid
const openid = this.handelGetOpenId(code);
// 调用登录接口
this.handelSubmit(openid, phoneNumber, verifyCode);
},
});
* 后端之所以需要 openid,是因为每个 token 和 openid 绑定的,而不是跟手机号绑定的。
这个 code 是什么?这个后端接口是自己的项目的后端接口还是微信开放平台接口?
在这个场景中,“code”是指微信登录流程中的一个重要部分,即微信授权临时登录凭证。当你的应用调用微信登录接口(通常是 SDK 提供的接口)时,用户会被引导到微信进行授权。授权成功后,微信会返回一个临时的授权凭证,即“code”。这个 code 是一次性的,只能使用一次,且有效期非常短。
这个后端接口是指你自己的项目的后端服务器接口。这个流程通常包含以下步骤:
- 客户端(uniapp)发起微信登录:用户在你的应用中点击登录,并通过微信授权。微信授权成功后,会返回一个 code 给你的应用。
- 将 code 发送到你的后端服务器:你的 uniapp 应用将这个 code 发送到你自己的后端服务器。
- 后端服务器使用 code 请求微信开放平台:你的后端服务器使用这个 code,结合你的微信应用的 AppID 和 AppSecret,向微信开放平台请求获取用户的信息,包括用户的 openid 和 unionid。在某些情况下,还可以获取到用户的手机号码。
- 后端处理用户信息:一旦你的服务器从微信那里获取到用户信息,你就可以根据这些信息在你的应用中执行登录操作,比如创建新用户或者将微信账号与现有账号绑定等。
第 4 步中,openid 是什么,为什么需要 openid?
微信小程序中的 openid
是一个非常重要的概念。以下是关于 openid
的详细解释及其重要性:
什么是 OpenID?
- 唯一标识符:
openid
是微信用户在某个特定微信小程序中的唯一标识符。每个用户在每个小程序中的openid
是唯一的。 - 隐私保护:
openid
不同于用户的微信号或手机号,它是一个不透露用户身份的随机字符串。这意味着仅凭openid
是无法直接识别用户身份的。
为什么需要 OpenID?
- 用户识别:在小程序中,
openid
用于区分不同的用户。由于微信平台对用户隐私的保护,小程序开发者无法直接获取用户的微信号等个人信息。因此,openid
成为识别和区分用户的主要方式。 - 数据关联:开发者可以使用
openid
将用户的行为数据、偏好设置、交易记录等信息关联到特定用户,从而为用户提供个性化的服务。 - 安全性:由于
openid
是与特定小程序绑定的,它提供了一定程度的安全性。即使信息被泄露,由于缺乏跨程序的有效性,泄露的风险相对较低。 - 会话管理:在用户登录小程序时,
openid
可以用于建立和维护会话(session)。这样,小程序可以在用户使用过程中保持用户状态,提供连贯的用户体验。
如何获取 OpenID?
- 通过
code2Session
接口:业务服务器后端可以使用从前端传来的登录凭证(code),调用微信的code2Session
接口,来获取用户的openid
和session_key
。这个code
通常是通过小程序端调用wx.login
方法获得的。
总的来说,openid
在微信小程序开发中扮演着关键角色,它既保障了用户隐私,又为小程序提供了一种安全、有效的用户识别和数据管理方式。