2024年Android最全微信小程序之微信登陆 —— 微信小程序教程系列(20),面试官说跳槽太频繁

推荐学习资料


  • 脑图
    360°全方位性能调优

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

logs.unshift(Date.now())

wx.setStorageSync(‘logs’, logs)

},

getUserInfo:function(cb){

var that = this

if(this.globalData.userInfo){

typeof cb == “function” && cb(this.globalData.userInfo)

}else{

//调用登录接口

wx.login({

success: function () {

wx.getUserInfo({

success: function (res) {

that.globalData.userInfo = res.userInfo

typeof cb == “function” && cb(that.globalData.userInfo)

}

})

}

})

}

},

globalData:{

userInfo:null

}

})

黄色标注的部分就是登陆部分

下面详细介绍微信小程序的微信登陆

第一步:获取登陆态code

微信登陆部分,首先需要使用微信小程序的api—— wx.login(OBJECT)来获取登录态

这个登陆态的作用是为了获取用户的openid(用户的唯一标识)

19956127-d300dd7d256c2656.png

相关链接:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject

示例:官方示例

js:

//调用登录

wx.login({

success: function(res) {

console.log(res);

if (res.code) {

//发起网络请求

//doSomething

} else {

console.log(‘获取用户登录态失败!’ + res.errMsg)

}

},

fail: function(){

console.log(“启用wx.login函数,失败!”);

},

complete:function(){

console.log(“已启用wx.login函数”);

}

});

TIPS:

上面这段代码的console.log(res);输出wx.login(OBJECT)的success成功回调函数返回值res的内容如下:

情况一:

出现这个code:”the code is a mock one”是在项目没有使用appid的情况下返回的,正常不是返回这个的!!

19956127-879eed415de95969.png

情况二:

项目在绑定appID后才能成功返回登录态,正确的登陆态如下图所示:

19956127-1ecc60015d9d2d6b.png

第二步:将登陆态code发送给第三方服务器(即自家的服务器)

19956127-afea600c3601eae4.png

上面通过wx.login(OBJECT)获取了登录态后,接下来就是将code发送给第三方服务器

我们先看看微信登陆的序时图:

序时图所示,通过wx.login()获取了code后,就使用wx.request()发送code给第三方服务器(也就是自家的服务器)

下面用代码来进行讲解这一步如何操作

示例:官方示例

把wx.login获取到的res.code返回值,直接以参数的形式,发起网络请求发送登陆态给自家服务器

js:

//调用登录

wx.login({

success: function(res) {

console.log(res);

if (res.code) {

//就是在这里发起网络请求,使用wx.request(),将登陆态发送给自家的服务器上

wx.request({

url: ‘https://test.com/onLogin’,

data: {

code: res.code

},

method: ‘POST’,

header: {‘content-type’: ‘application/json’},

success: function(data){

}

})

} else {

console.log(‘获取用户登录态失败!’ + res.errMsg)

}

},

fail: function(){

console.log(“启用wx.login函数,失败!”);

},

complete:function(){

console.log(“已启用wx.login函数”);

}

});

如何使用微信小程序发起网络请求?

请看如下教程:微信小程序的网络请求 ——微信小程序教程系列(14)

第三步:code 换取 session_key和openid

登陆态发送给自家的服务器后,接下来就是后台进行操作。

下面我把 自家的服务器简称 后台,方便阅读(你知道我说的后台指的是我们自己的服务器,而不是微信的服务器就行)。

后台接收到登陆态后,由后台发起网络请求给微信服务器

备注:后台没有语言要求!!任意一门后台语言都可以。

接口地址:

https://api.weixin.qq.com/sns/jscode2session

参数说明:

19956127-78e77c1487202bf9.png

备注:

appid和secret登陆微信公众平台,打开设置——开发设置,即可获取(app secret需要生成)。

19956127-9387bede14df9933.png

grant_type是固定写法,值为authorization_code即可。

返回结果:

19956127-ab9949e46a3999e0.png

后台发送请求成后,腾讯服务器会返回session_key 和 openid,如下图:

成功返回的结果

19956127-0e484ceb640aba43.png

失败返回的结果

19956127-a354e1cc300afde9.png

第四步:生成3rd_session返回给客户端

第四步也是做后台中的操作!!

此时把微信服务器返回的session_key 和 openid保留在后台中,由于考虑安全性的问题,不要直接返回给客户端。

然后用操作系统提供的随机数算法生成一个新的session,微信把它叫做3rd_session。(注意:这个session要有足够的长度,建议有2^128种组合,即长度为16B;设置一定的时效性)

以3rd_session为名作为key,返回的session_key和openid作为值,保存在后台上。

最后只需要在后台,返回一个3rd_session给客户端即可。

以后客户端部分,就使用这个3rd_session发送给后台,后台接收3rd_session获取对应的session_key和openid,再通过session_key和openid判断对应的用户返回该用户相关的数据

备注:小程序用这种方法来代替浏览器自身发送的cookie,因为web的做法是服务器A会保存起访问登录接口的这个cookie到session中,当你再次访问其他接口的时候,服务器A首先会判断这个session,是否是之间的cookie从而知道是不是对应的用户。(http协议是一种短链接的关系,其特点是客户端发起请求链接到服务端,服务端返回数据,链接断开!因此之间是不会有任何数据的储存。)

示例:接上示例

js:

wx.login({

success: function(res) {

console.log(res);

if (res.code) {

wx.request({

url: ‘https://test.com/onLogin’,

data: {

code: res.code

},

method: ‘POST’,

header: {‘content-type’: ‘application/json’},

// 在发送请求成功的部分,返回的数据是后台返回的3rd_session

success: function(data){

console.log(data)

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

[外链图片转存中…(img-g5ZUKlqb-1715633141414)]

七大模块学习资料:如NDK模块开发、Android框架体系架构…

[外链图片转存中…(img-DpXrmRZ9-1715633141415)]

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值