微信小程序自己可以不需要做登录注册功能

因为能够使用微信小程序,就一定需要一个已经登录的微信。所以,微信小程序的用户身份就是当前微信账号。流程大致是这样:

整个过程是不需要用户授权的,也就是你总是可以假设能够取到用户的微信小程序身份标识。说起来简单,但实际上并不是那么直接,即微信并不会直接将用户的 openid 信息直接传送给微信小程序。相反,有一个流程要走,这个流程,就是开放授权中的授权码许可流程,有意思的是,如果只是获取 openid,微信并不会显式地要求用户做授权。

关于开放授权中的授权码许可流程,可以详见如下三篇讲解:

而落实到代码方面,不妨使用 authing-wxapp-sdk,以减少自己琐碎的代码编写工作。引用了这个 sdk 之后,登录代码可以简化成:

python import {AuthenticationClient} from authing-wxapp-sdk;

export const authing = new AuthenticationClient({ userPoolId: 620097b69a9dab5e967d0c44, appId: authingAppId })

export const login = async (): Promise => { const {code} = await Taro.login() // 成功登录,将 token 写入微信 Storage return await authing.loginByCode(code); }

线上代码见:https://github.com/Jeff-Tian/weapp/blob/main/src/common/login.ts 。对比前述三篇文章,可以看到完全自己实现这个过程,需要写很多代码的走很多流程。记住,永远不要通过前端方式来将用户标识传来传去,而且前端永远不能直接从 URL 或者非自己服务器的地方获取用户标识,否则任何人都可以随意伪装成某个人的身份。

而采用 authing-wxapp-sdk 能少写很多代码,不仅这个包里封装了必要的前端代码,更重要的是有一个现成的服务器端,供你配置一下就可以使用。

为了验证不需要用户授权,即用户无感知的情况下,微信小程序就可以获取到用户标识的想法,我做了一个云剪贴板功能,不需要用户的授权的情况下,就能将用户的剪贴板数据和云端同步(尽管现在很多厂商都提供了这个功能,但有时还是希望有这种小程序,不需要安装 APP,就能不局限于苹果或者某一个单一系统使用了):

https://taro.jefftian.dev/pages/subpages/auth/authing (遗憾的是,做为个人版小程序,没有权限获取到 unionid,所以网页版扫码登录和微信小程序直接使用时,同一个人也会产生两个账号)

微信小程序体验版的身份验证

微信小程序体验版做了一个身份拦截,只有白名单中的用户才能访问到体验版微信小程序。在上面一节利用 authing-wxapp-sdk 做好了身份验证之后,就可以自己实现这个体验版拦截了。

微信小程序的体验版白名单大概是这样实现的:

在第一节里对接了微信身份之后,就可以自行实现以上逻辑,从而在正式版小程序里实现用户白名单功能了。比如当某一功能还没有完全对外开放时,可以只给白名单里的用户使用。

以上两个流程图是用 mermaid js 画的,源代码分别如下:

python flowchart TD 已经登录微信? --否 --> 跳转到微信登录页 已经登录微信? --是 --> 打开小程序 --> 通过授权码获取用户身份 跳转到微信登录页 --> 登录微信成功? 登录微信成功? --否 --> 报错 登录微信成功? --是 --> 打开小程序

python flowchart TD 已经登录微信? --否 --> 跳转到微信登录页 已经登录微信? --是 --> 打开体验版小程序 打开体验版小程序 --> 用户ID是否在白名单内? 用户ID是否在白名单内? --否 --> 显示无权限访问 用户ID是否在白名单内? --是 --> 展示体验版小程序