uniapp中,使用手机号登录的流程

Daotin 于 2023-11-09 发布 编辑

您描述的流程结合了微信小程序的认证机制和手机号验证码登录。这种方式有效地利用了微信提供的安全认证体系,并通过手机号验证码进一步加强用户身份验证。这个流程大致可以分为以下几个步骤:

  1. 用户输入手机号并获取验证码:用户在小程序的登录界面输入手机号,并请求发送验证码。小程序后端将验证码发送到用户的手机。
  2. 用户输入验证码:用户收到验证码后,在小程序提供的界面上输入这个验证码。
  3. 调用 uni.login 获取 code:在用户输入验证码的同时,小程序调用 uni.login 方法来获取微信的登录凭证(code)。uni.login 是 UniApp 提供的用于登录微信小程序的 API。
  4. 小程序后端使用 code 获取 openid:小程序后端使用从 uni.login 获得的 code,调用微信提供的 code2Session 接口来获取用户的 openidopenid 是用户在当前小程序的唯一标识符。
  5. 使用 openid 和验证码进行登录:小程序后端接收到用户的 openid 和输入的验证码后,进行验证。它会检查验证码的正确性,并且确认该 openid 是否已经与一个账户关联。
  6. 创建或验证用户账户:如果验证成功,并且是新用户,小程序后端可以创建一个新的账户并将其与 openid 关联,并返回 token。如果是已有用户,则直接返还 token

这种方式结合了微信的安全认证和手机号验证,提供了一个相对安全且用户友好的登录流程。同时,它也遵守了微信的用户隐私规则,因为小程序只能通过 openid 来识别用户,而无法直接获取到更敏感的个人信息。

总结下流程:

  1. 输入手机号,调用后端接口,获取验证码
  2. 点击登录。调用 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 是一次性的,只能使用一次,且有效期非常短。

这个后端接口是指你自己的项目的后端服务器接口。这个流程通常包含以下步骤:

  1. 客户端(uniapp)发起微信登录:用户在你的应用中点击登录,并通过微信授权。微信授权成功后,会返回一个 code 给你的应用。
  2. 将 code 发送到你的后端服务器:你的 uniapp 应用将这个 code 发送到你自己的后端服务器。
  3. 后端服务器使用 code 请求微信开放平台:你的后端服务器使用这个 code,结合你的微信应用的 AppID 和 AppSecret,向微信开放平台请求获取用户的信息,包括用户的 openid 和 unionid。在某些情况下,还可以获取到用户的手机号码。
  4. 后端处理用户信息:一旦你的服务器从微信那里获取到用户信息,你就可以根据这些信息在你的应用中执行登录操作,比如创建新用户或者将微信账号与现有账号绑定等。

第 4 步中,openid 是什么,为什么需要 openid?

微信小程序中的 openid 是一个非常重要的概念。以下是关于 openid 的详细解释及其重要性:

什么是 OpenID?

为什么需要 OpenID?

  1. 用户识别:在小程序中,openid 用于区分不同的用户。由于微信平台对用户隐私的保护,小程序开发者无法直接获取用户的微信号等个人信息。因此,openid 成为识别和区分用户的主要方式。
  2. 数据关联:开发者可以使用 openid 将用户的行为数据、偏好设置、交易记录等信息关联到特定用户,从而为用户提供个性化的服务。
  3. 安全性:由于 openid 是与特定小程序绑定的,它提供了一定程度的安全性。即使信息被泄露,由于缺乏跨程序的有效性,泄露的风险相对较低。
  4. 会话管理:在用户登录小程序时,openid 可以用于建立和维护会话(session)。这样,小程序可以在用户使用过程中保持用户状态,提供连贯的用户体验。

如何获取 OpenID?

总的来说,openid 在微信小程序开发中扮演着关键角色,它既保障了用户隐私,又为小程序提供了一种安全、有效的用户识别和数据管理方式。