公司业务开展,最近完成了一个微信小程序的开发。场景是这样,同一微信开放平台下拥有相同主体的APP和微信小程序来完成同样的业务,用户进入app或者微信小程序时必须获取用户的unionid来确认当前的用户身份,完成登录。小程序“获取用户信息”api(getUserInfo)的调用方式和之前相比有了较大更新,优雅的实现用户授权和登录非常重要,以下是我在微信小程序授权登录相关流程在开发时候的实现思路和总结,分享如下。
说明:
你可以简单的理解为
如果开发者在多个移动应用、网站应用和公众帐号之间有统一用户账号的需求,需要前往微信开放平台(openweixinqqcom)绑定公众号后,便可利用UnionID机制来满足上述需求。
用户在开放平台的唯一标识符
你可以简单的理解为:
微信针对不同的用户在不同的应用下都有唯一的一个openId, 但是要想确定用户是不是同一个用户,就需要靠unionid来区分。一般自己的后台都会有自己的一个用户表,每个用户有不同的userid。也就是说同一个用户在同一个微信开放平台下的相同主体的应用对应着相同的userid,unionid以及不同的openid。所以在用户登录进来的时候,我们只能靠微信返回给我们的unionid去判断是不是同一个用户,在去关联我们的用户表,拿到对应的userid。
绑定了开发者帐号的小程序,可以通过下面3种途径获取UnionID。
当用户满足条件2和3时,开发者可以直接通过wxlogin获取到该用户的unionid, 否则必须调用接口 wxgetUserInfo ,额外需要注意的事就是妥善处理用户拒绝授权的情况。
在真实的业务场景中,我们希望,用户进入小程序时,未登录情况下可以正常浏览商品,对小程序有个基本的认知,不要直接d出框要求用户授权,否则会干扰用户,导致新用户的流失,当用户需要使用一些高级功能和场景,这个时候再去要求用户授权,这样用户授权的几率会大大提高。
将登录的逻辑封装ajax
流程:
封装的意义
不再关注当前接口是否需要登录,用户是否已授权,所有请求直接调用 ajax() ,在必要的时候完成一切登录以及授权流程。小程序入口页面增加,业务拓展的时候,你只需要专注于业务实现。
参考资料
方法/步骤
首先,要更新手机百度到最新版本,更新到最新版本以后,就可以找到小程序了,不是最新版本的话, *** 作上可能不一样。
更新了以后打开手机百度,怎么进入到小程序,其实非常简单,举个简单的例子,比如我们搜索违章查询,如果有这个小程序,下面就会显示的有了。
或者要想找其他小程序的话,可以在界面的最下面点击我的按钮,就可以了,进入到主界面中。
在我的主界面,中间有一行,目前都是小程序的,我们划到最后面,可以看到有一个菜单按钮,点击进入到里面。
在这个里面,就可以看到我们可以进行搜索小程序了,搜索以后,就可以进入到相关的程序里面了。
如果是有的话,我们在里搜索了以后,就可以看到小程序了,比如爱奇艺,我们搜了以后,就会显示了。直接点击就可以进去了。
如果是没有的话,点击搜索以后,就会显示没有这个小程序的,就是不能用的。需要换其他的了。
还有最简单的进入方式就是我们直接在百度主界面下拉,就会看到小程序界面了,直接就可以进入到里面了。
最近开发微信小程序,做登录功能时遇到下图。
看太懂,有几处疑惑地方:
下面就是寻找答案的过程。
豪车模型
邻居模型
在上面两个模型中。豪车的主钥匙赋予泊车钥匙部分权限,而你赋予你的邻居所有的权限。比较之下,我们更希望使用豪车模型赋予部分权限,而不是邻居模型,万一他偷偷配了把钥匙呢?这种授权存在不安全性,在网络开发中也是如此。
登录时可以选择社交账号登录,这里以 QQ 为例。这里涉及三方:当前要登录的用户,以下简称 用户 ,其它两方是: , QQ 服务器 。因为 用户
之前注册过 QQ, 请求 QQ 服务器 授权用户的 QQ 基本信息,这样用户就不用在上再进行注册了。
下面来探讨下 QQ 服务器 如何授权 当前 用户 的 QQ 基本信息。
这种方法比较简单, 用户 告诉 它的 QQ 账号密码,拿着账号密码去请求 QQ 服务器获取用户基本信息。
优点 : *** 作简单。
缺点 :用户将 qq 账号密码给了,获得了该用户在 QQ 上的所有特权,不仅可以查看基本信息,还可以查看 QQ 空间,查看 QQ 邮箱等,而用户的本意是只让获取 QQ 基本信息这一项特权。
下面是在 小胡子哥的个人博客 里看到的,将整个授权过程讲解的生动形象,我就不做二次加工,直接截取部分内容如下。
开发微信小程序第一步要在 微信公众平台 上注册一个账号,注册完成后在 设置 > 开发设置 里可以看到 AppID 和 AppSecret,这相当于上面提到的 Client Id 和 Client Secret。
微信登录用户 在 微信 中打开 小程序 , 小程序 中运行了 wxlogin 接口,此时 小程序 拿着 appid 去请求 微信服务器 给 小程序 授权,让它可以调用一些微信接口,比如获取微信登录用户的基本信息。因为是 微信登录用户 进行 *** 作的,所以微信那端默认是同意授权的。(appid 哪里来?在新建小程序项目时输入,每个 appid 和小程序都是一一对应的)
上面也提到,这个 code 可能会泄露,所以需要 code + appid + appsecret 去再次拜访微信服务器获取令牌 session_key 和用户标识 openid。
这里有个疑问?为什么获取 code 在小程序上做,而获取 session_key 在第三方服务器上 *** 作?这是因为获取 code 需要使用 appid 去跳转微信服务器授权页面,再使用当前 微信登录用户 默认同意此次授权,如果坐在第三方服务器上,appid 我们是知道的,但是当前 微信登录用户 是不知道,只要手机上的微信知道。
那为什么请求 session_key 在第三方服务器上 *** 作?这是因为前面也说过 code 只能表明微信服务器统一此次授权,但是 code 可能会泄露,还需要第二张门票 appsecret 告诉微信服务器 “就是我,不是别人” 来请求获取 session_key 的。可见 appsecret 对于安全的重要性,放在第三方服务器方便管理。
关于 openid 和 session_key 说明?session_key 就是返回的绿卡,此后每次访问微信服务器资源都要带上它,这样微信服务器才知道此次请求是有授权的,我可以把资源给你。openid 是同意授权的那个人,这里是 微信登录用户 的标识 ID。也就是为什么 code 要在小程序中获取中我们不知道的那个 微信登录用户 ID。
到此,上图中涉及 Oauth20 的部分已经结束,下面的那些都是普通的 session 维持会话机制,这里就不再赘述。
由于作者文笔有限,文章如有遗漏或表达有误,请不吝赐教。如果仍对微信授权或 Oauth20 有疑问的,欢迎留言讨论。
1、打开微信小程序胡莱三国,点击登录按钮,在登录页面,点击QQ浏览器登录。
2、系统会自动跳转到QQ浏览器登录页面,输入QQ账号和密码进行登录。
3、登录成功后,系统会自动跳转回胡莱三国小程序,此时已经完成了登录。
小程序的登陆入口和公众号的登陆入口是一样的,因为小程序是公众号这个大整体的一份子。不一样在于账号的不同,所以腾讯要求一个邮箱对应一个账号。你用哪个邮箱注册的小程序,就用这个邮箱作为账号去登陆,然后和登陆公众号的流程一样,扫码就好了
小程序登录第一次总是会失败,第二次肯定成功pad block corrupted
<meta charset="utf-8">
在开发微信小程序过程中,遇到一个登录的问题。就是微信小程序登录 *** 作的时候,第一次总是会失败,返回 pad block corrupted ,然后再次登录的时候就会登录成功。出现这样的错误,百度原因大多数是说 session_key 过期,到期去解密手机号数据的时候,解密出错。具体分析:
img
这里描述的问题是出现在第四步的步骤中,原因是第三步获取的 session_key 不正确,导致解密 *** 作错误,返回 pad block corrupted 。但是导致 session_key 不正确的原因是第二步调用 wxlogin() 方法,会刷新 session_key 。因为第一步获取的手机号加密数据是通过原来的 session_key 加密的,现在 session_key 刷新了,导致后台在第三步去获取 seesion_key 的时候,获取的是新的 seesion_key ,然后去解密的时候就报错了。
以上就是关于微信小程序授权登录最佳实践全部的内容,包括:微信小程序授权登录最佳实践、百度小程序入怎么进入怎么制作、梳理微信小程序登录时序图:授权与 Oauth2.0等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)