微信小程序的登录过程简介
来源:互联网 发布:网络诈骗小品剧本5人 编辑:程序博客网 时间:2024/05/23 14:31
对于微信而言, 小程序算是第三方了, 那么, 小程序是如何登录的呢? 微信肯定不能把密码给小程序, 让小程序来登录啊, 小程序甚至无法获取微信的微信号。 在这里, 我们需要彻底把微信和小程序分开, 割裂来看, 才好理解。
那小程序是怎样来登录的呢? 这就涉及到微信开放平台了。我们知道, 很多网站支持QQ登录, 支持微博登录, 也支持微信登录。 这种借账号体系的行为, 我们早就讨论过, 无需赘述。 我们知道, 每个用微信的人, 都一个微信号, 那么从微信中进入小程序, 就需要一个什么号来标识这个小程序, 这就是openID, 对于同一个小程序而言, 不同用户的openID是不一致的, 这在oAuth协议中有介绍。
下面, 我们来看看小程序的登录过程。
小程序调用wx.login函数, 获取与这个用户对应的code(js_code), 然后把这code带给小程序后台, 于是乎小程序后台就拿到了区别于用户的code, 这实际上是微信给小程序的一个登录态标志, 有点像token/session, 其实不是像, 而是是。 虽然每个用户的code不一样, 但当然不能以这个作为区分每个用户的标志啊, 因为code会变化(过期), 所以思来想去, 还是用与微信号有一一对应关系的openID更为靠谱。
来一起看看微信公众平台的介绍:
wx.login(OBJECT)
调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
注:调用 login
会引起登录态的刷新,之前的 sessionKey 可能会失效。
OBJECT参数说明:
success返回参数说明:
示例代码:
//app.jsApp({ onLaunch: function() { wx.login({ success: function(res) { if (res.code) { //发起网络请求 wx.request({ url: 'https://test.com/onLogin', data: { code: res.code } }) } else { console.log('获取用户登录态失败!' + res.errMsg) } } }); }})
code 换取 session_key
这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。
session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
请求参数:
返回参数:
返回说明:
//正常返回的JSON数据包{ "openid": "OPENID", "session_key": "SESSIONKEY", "unionid": "UNIONID"}//错误时返回JSON数据包(示例为Code无效){ "errcode": 40029, "errmsg": "invalid code"}
wx.checkSession(OBJECT)
通过上述接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用wx.checkSession接口检测当前用户登录态是否有效。登录态过期后开发者可以再调用wx.login获取新的用户登录态。
OBJECT参数说明:
示例代码:
wx.checkSession({ success: function(){ //session 未过期,并且在本生命周期一直有效 }, fail: function(){ //登录态过期 wx.login() //重新登录 .... }})
登录态维护
通过 wx.login
获取到用户登录态之后,需要维护登录态。
开发者要注意不应该直接把 session_key、openid 等字段作为用户的标识或者 session 的标识,而应该自己派发一个 session 登录态(请参考登录时序图)。对于开发者自己生成的 session,应该保证其安全性且不应该设置较长的过期时间。session 派发到小程序客户端之后,可将其存储在 storage ,用于后续通信使用。
通过 wx.checkSession
可以检测用户登录态是否失效。并决定是否调用 wx.login
重新获取登录态
登录时序图
值得注意的是, code可以认为是微信给小程序的一个登录态票据, 而3rd_session则是小程序后台给小程序的登录态票据。 在后续的会话中, 真正的主角是小程序和小程序后台, 所有的业务逻辑应该围绕小程序和小程序后台展开,微信和微信后台退居幕后(只能提供了开放登录接口的能力、和基础的api功能而已)
在后续的读写访问中, 3rd_session作为登录态票据, 来访问小程序后台, 执行对应的动作。 小程序后台则要进行登录态校验。
其实, 很简单。
- 微信小程序的登录过程简介
- 微信小程序 登录过程
- php(ThinkPHP)实现微信小程序的登录过程
- 微信小程序的简单登录
- Linux 终端及终端登录过程简介
- Linux 终端及终端登录过程简介
- C++程序编译过程简介
- java 程序运行过程 简介
- C++程序编译过程简介
- C++程序编译过程简介
- C++程序编译过程简介
- 微信小程序的详细登录(上)
- 分析微信小程序的登录和支付
- 微信小程序的登录允许拒绝
- 简单的登录程序
- 记一次登录程序的改进过程(改进记住密码功能、提高用户交互)
- c# 一个托盘程序的详细设计过程(用户登录)
- LINUX的终端登录过程
- 发一个半平面交的模版
- CSS实现兼容性的渐变背景(gradient)效果
- 正则表达式
- YOLO v2 人脸检测——加入Wider_face数据集进行fine tuning[by zhangzexuan]
- springmvc启动报错
- 微信小程序的登录过程简介
- NYOJ 2355: 点兵点将 (脑洞题)
- 9-18NOIp模拟赛总结
- MySQL里面的子查询
- 画刷 QBrush
- CSS中的scroll-behavior
- springboot报错Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
- C#--实例选号器/实现单组选号和手写选号、展示所有选号功能
- C++#pragma pack指令