主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
为了让小程序应用能够使用微信登录状态进行授权登录,微信小程序提供了开放的登录授权接口。 乍一看,文档看起来很合理,但是到了实现的时候却很混乱,不知道如何管理和维护登录状态。 本文提供有关如何访问和维护企业微信登录状态的分步说明。
接入流程
这里官方文档中的流程图已经足够清晰了,所以我就直接详细解释和补充一下。
首先,如果你看这张图,小程序使用了微信第三方服务器以及小程序前端和自己的服务器。 微信服务器扮演什么角色参与其中呢?我们一起来看看登录认证流程。 然后你就会明白了。
1.调用wx.login生成代码
wx.login() API的作用是为当前用户生成临时登录凭证。 这些临时登录凭证的有效期仅为 5 年。 分钟。 获得这些登录凭据后,您可以继续下一步。 获取 openid 和 session_key。
wx.login({ success: function(loginRes) { if (loginRes.code) { // example: 081LXytJ1Xq1Y40sg3uJ1FWntJ1LXyth } }} ) ;
2.获取openid和session_key
首先,先介绍一下openid。 用过公众号的童鞋应该对这个标志很熟悉。 在公共平台上,它用于识别每个用户。 订阅号、服务号、小程序三种不同应用的唯一标识。 这意味着每个应用中每个用户的openid并不一致,因此小程序可以使用openid来唯一标识用户。 性别。
那么session_key有什么用呢?我们需要允许用户使用他们的用户ID登录。 那么session_key就得到保证当前用户执行的会话操作的有效性。 这个session_key是微信服务器分配的。 这意味着你可以使用这个标识符来间接维护小程序用户的登录状态。 那么我们如何获取这个session_key呢?我们需要请求微信自己服务器上提供的第三方接口https://api.weixin.qq.com/sns/jscode2session。 这个接口需要四个参数字段:
要从这些参数请求这个接口,首先调用wx.login()并编写你的代码,结果你需要获取它。 用户的当前会话。 那么为什么我们需要在服务器端请求这个接口呢?其实是出于安全考虑。 通过前端请求调用该接口必然需要将小程序的appid和小程序秘密暴露给外界。 同时,还暴露了微信服务器下发的session_key。 对于“好心人”来说,这对我们的业务安全构成了巨大的风险。 除了在服务器端获取session_key外,还有两点需要注意:
session_key与微信分发的代码是一一对应的,所以可以使用相同的代码。 session_key 仅交换一次。 每次调用 wx.login() 时,都会发出一个新的代码和相应的 session_key 。 为了保证用户体验和登录状态的有效性,开发者必须意识到用户在调用wx.login()之前必须重新登录。
session_key 无效。 即使不调用wx.login,session_key也会过期。 有效期与用户使用小程序的频率正相关,但具体时间段是开发者和用户都知道的。 无法访问
Function getSessionKey(code, appid, appSecret) { var opt = { method:\'GET\', URL:\'https://api.weixin.qq.com/sns/jscode2session\', params: { appid: appid, Secret: appSecret, js_code: code, grant_type: \'授权码\' } }; return http(opt).then (function (response) { var data = response.data; if (!data.openid || !data.session_key || data.errcode) { return { 结果: -2, errmsg: data.errmsg || \'返回数据字段不完整\' } } else { return data } });}
3. 生成第3个会话
如上所述,将通过session_key“间接”维护登录状态。 所谓间接,就是你要自己管理用户的登录状态信息。 这里还考虑了安全因素。 如果直接使用微信服务器分发的session_key作为业务伙伴的登录状态,可能会被“细心的人”用来获取用户的机密信息。 例如,wx.getUserInfo()接口需要session_key来解密微信用户的敏感信息。
如果您生成自己的登录状态标识符怎么办?您可以在此处使用一些常见的标识符。md5、sha1等不可逆哈希算法将生成的登录状态ID(这里统称为“skey”)返回给前端,前端维护登录状态ID(通常存储在仓库中)。 在服务器端,生成的skey存储在用户对应的数据表中,前端通过传递skey来访问用户的信息。
在这里你可以看到我们使用 sha1 算法来生成 skey:
const crypto = require(\'crypto\');return getSessionKey(code, appid , Secret) .then ( resData => { // 选择一种加密算法来生成自己的登录状态标识符 const { session_key } = const skey = encryptSha1(session_key) }); function encryptSha1(data) { return crypto.createHash( \'sha1\') .update(data, \'utf8\').digest(\'hex\')}
4. checkSession
之前,我们将 skey 添加到了存储中。 每次我们请求用户数据时,我们都会带上滑雪板。 那么如果此时session_key过期了怎么办呢?因此,我们需要调用wx.checkSession()接口来检查当前session_key是否已经过期。 该API不需要传递任何有关session_key的信息参数。 相反,微信小程序会调整自己的服务来执行用户最近的查询,并检查session_key一旦生成后是否已过期。 如果当前session_key已经过期然后,重新登录用户,更新session_key,并将最新的skey保存到用户数据表中。
checkSession 步骤通常放置在小程序启动时检查登录状态的逻辑中。 这是检查登录状态的流程图。
下面的代码是一个检查登录状态的简单过程。
let loginFlag = wx.getStorageSync(\ 'skey\');if (loginFlag) { // 检查session_key是否已过期 wx.checkSession({ // session_key是否有效(未过期) success: function() { // 处理业务逻辑 }, // Session_key 已过期 false : function() { // Session_key 已过期,重新登录 doLogin (); } } );) else { // 首次登录时不要使用 skey doLogin();}
推荐:《小程序开发教程》
下载微信App
微信是,是一款支持手机的移动通讯软件。 您可以通过 Internet 发送语音消息、视频、照片和文本。 微信带来了全新的移动通信体验,您可以单独或群组聊天,还可以根据您的地理位置查找附近的人。 遇到麻烦的朋友,请快来保存您的下载体验吧!
下载
这几篇文章你可能也喜欢:
- 如何实现小程序发送服务通知(小程序如何主动向用户发送通知)
- 如何获取小程序的unionid(如何获取小程序的页面路径)
- 生成海报的示例小程序(Java后端)(微信小程序生成海报演示)
- 什么是小程序? 有哪些功能?(什么是小程序?有哪些功能?)
- 介绍如何用小程序生成参数二维码(二维码+小程序参数)
本文由主机参考刊发,转载请注明:小程序如何获取并维护微信登录状态(微信小程序用户登录功能) https://zhujicankao.com/124149.html
评论前必须登录!
注册