最新时时彩平台演示 中新时时彩要不要交税 新时时彩三星组六技巧 最新时时彩源码修改 新时时彩遗漏走势图 新时时彩预测方法 新时时彩计算器 新时时彩开奖皇冠网址 新时时彩组三怎么玩 最新时时彩后四稳赚 新时时彩官方开奖网站 新时时彩人工计划 新时时彩开奖漏洞 新时时彩最长遗漏 新时时彩中奖顺序 360新时时彩技巧-轴承资讯 新时时彩停售 最新时时彩杀号高手 新时时彩三星走势图 玩新时时彩有什么技巧 新时时彩3星和尾走势 新时时彩后一公式 重新时时彩网站 新时时彩遗漏统计软件 吉林新时时彩走势图 新时时彩中奖怎么查 新时时彩是什么地方 新时时彩中奖怎么查 新时时彩下载手机版下载 新时时彩贴吧 最新时时彩计划软件 大赢家新时时彩 新时时彩注册送彩金 新时时彩组选投注技巧 新时时彩走势图 新时时彩万能5码 新时时彩模拟 新疆新时时彩往期开奖号码 新时时彩的玩法 新时时彩稳赚计划 最新时时彩70注 新时时彩返奖率 新时时彩杀号定胆360 新时时彩后二杀号 新时时彩振幅走势 最新时时彩教程 新时时彩后台软件 新时时彩几点开始 新时时彩日赚几百 最新时时彩注册送20
用户
 ?#19968;?#23494;码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,登录网站

小程序社区 首页 教程 查看内容

微信小程序的登录体系

Rolan 2019-2-19 00:21

我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器)。cookie 和 session 的区别cookie和session并不是同一个层面的东西。cookie是实际真实存在的一个东西,是http协议规定的, ...

我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器)。

cookie 和 session 的区别

  1. cookie 和 session 并不是同一个层面的东西。

  2. cookie 是实际真实存在的一个东西,是http协议规定的,如同一种载体,我们可以在响应头里面设置 cookie,只要你愿意,你可以在cookie里面设置任何东西,不管是用户信息用户昵称, 但是这样有安全性风险,cookie里面不适合有敏感性的信息,比如说,只放 session_id

  3. session 是一个抽象概念,是客户端和服务端保?#21482;?#35805;的一种方法,一种通用的机制。 session 的意思是 会话 ,实现是:服务端把一个 唯一标识 和用户身份的对应的关系存储下来,存在 redis , 文件 , 数据库 中都可以。客户端出的请求带上 唯一标识 ,服务端从 redis或者 文件 或者 数据库 中?#39029;?#36825;个 唯一标识 对应的身份,这?#21482;?#21046;就被称为 session

  4. session 机制大部分使用 cookie 作为载体运送这个 唯一标识 ,也可以采用url 连接、 自定义请求头来实现。

小程序登录态

对于小程序来说,也需要一个唯一的标识符来区分用户,也就是session来保?#21482;?#35805;,但是小程序没有cookie, 因此我们的唯一标识符会被存储在 localstorage 里面,?#30475;?#21457;请求?#20445;?#37117;会从 localStorage 里面拿到这个唯一标识符,带在请求?#23567;?/p>

微信的 openid 和 code

在日常开发中,我们也经常听到 openid 和 code 的概念。

openid 用来标识这个唯一的微信用户,也就是说,一个微信用户相对于一个公众号(主体)的 openid 是唯一的,是不会变的。

那么我们如何才能知道 某一个用户的 openid 呢?

就是通过 code , 对于同一个用户,?#30475;?#33719;取到的 code 都会改变,有有效期。我们把 code 作为?#38382;?#35843;用指定的微信服务器的接口,就可以拿到用户的 openid 。

那么我们如何才能拿到 code 呢?

微信内h5页面的方法是:跳到指定的微信的承接页面,再跳回到本页面,url链接上就会被拼上 code 。

小程序的方法是: 通过调用 wx.login() 方法,就可以拿到用户的 code

知道了上面的前提条件,就可以去实现一个微信小程序的登录体系。

微信小程序登录体系

  1. 通过 wx.login() 获取到用户的 code

  2. 通过 wx.request() 方法请求我们自己的后端,我们自己的服务端把 appid , appsecret 和 code 一起发送到微信服务器。 appid 和 appsecret 都是微信提供的,可以在管理员后台找到

  3. 微信服务器返回了 openid

  4. 我们在自己的数据库中,查找 openid ,如果没有查到记录,说明该用户没有注册,如果有记录,则继续往下走

  5. 我们生成一个第三方session, 也就是session_id, 也就是用户唯一标识符。在redis中,把session_id 和用户的身份存进去。

  6. 返回 3rd_session

  7. 小程序把 3rd_session 存到 storage 里面

  8. 下次请求?#20445;?#20808;从 storage 里面读取,然后带给服务端

  9. 服务端从redis 里面找到 3rd_session 对应的记录,然后校验有效期

问题一:

为什么我们要自?#20309;?#25252;一个用户数据库,实现一个注册体系?用微信的不好吗?

因为我们业务不光是在微信里面玩,比如说,在app的场景下,我们肯定没有办法通过微信这一套来登录。

问题二:

为什么仍需设?#20204;?#31471;的登录态,而不是?#30475;?#29992;小程序的code换open_id?

因为用code换open_id的方式,需要等待wx.login() 获取code, 需要等待node端请求微信服务器用code换取open_id。 相比于直接直接带上登录态,用户等待时间更长。

获取用户信息

最新版小程序中,只需要一个按钮就可以获取到用户的信息

获取头像昵称 
复制代码

微信规定需要指定该btn的 open-type 为 getUserInfo , 用户信息会放在 getUserInfo 的回调函数里面。

如果用户之前没有授权过,则会弹出弹窗授权。

如果用户已经授权过,则不需要弹出弹窗授权。

通过 wx.getSetting 方法可以获取到用户的授权信息

wx.getSetting({
            success(res) {
                if (!res || !res.authSetting) {
                    wx.showToast({
                        title: '查询授权失败',
                    })
                    return;
                }
                this.setData({
                    authInfo: res.authSetting
                })
            }
        })
复制代码
鲜花
鲜花
鸡蛋
鸡蛋
分享至 : QQ空间
收藏
原作者: 杜俊成要好好学习 来自: 掘金
新时时彩软件