首页 > 编程知识 正文

小程序登录验证授权过程,登记注册身份验证小程序

时间:2023-05-05 15:46:36 阅读:267147 作者:681

椰汁笔记,欢迎指正

微信小程序的登录(python flask实现后端),实现的核心是

让服务器得到用户的openid。服务器生成sessionId发送给客户端,sessionId即是客户端和服务器的会话密钥。
第一步:客户端发送code给服务端(code调用微信api获得) 通过调用wx.login()获得,code的值在返回结果的code字段。再使用wx.request()将code发送给服务器,注意要使用GET方法请求服务器,将code放在data字段。 wx.login({sucess: function(res){if(res.code) {wx.request({url: 'http://192.168.26.190.5000/',data:{code: res.code},)}}}}) 第二步:服务器获取请求中的code,用code请求微信api获取openid 注意GET方法上传的参数的获取方式是 request.agrs[],(注意这个request来自flask中的request)

然后就是请求微信提供的api换取openid,微信服务器提供的接口地址是:

https://api.weixin.qq.com/sns/jscode2session?appid=<AppId>&secret=<AppSecret>&js_code=<code>&grant_type=authorization_code

URL的query部分的参数中<AppId>, <AppSecret>, <code> 就是前文所提到的三个信息,请求参数合法的话,接口会返回以下字段。

注意的是:AppId和AppSecret都在微信的开发公众平台上,


在创建小程序时,你使用的appId可能只是一个测试号,需要在开发者工具中查看,更换为上面页面的appid,这样的AppId和AppSecret请求api才能获得openid。然后请求api获取openid,注意这里使用的requests来自与flask无关的python
requests库,请求到的结果json解析后便可以在openid字段拿到用户的openid。 r = requests.get('https://api.weixin.qq.com/sns/jscode2session?''appid=%s&secret=%s&js_code=%s''&grant_type=authorization_code'%('你的appid','对应的appsecret','小程序端得到的code'))openid = r.json()['openid'] 第三步:生成用户的sessionId,返回给用户。 其实用openid已经可以标识用户,可以将openid直接返回给客户端,以后的访问服务器操作带上openid参数即可,但是openid是一个非常隐私的用户数据,微信小程序推荐服务器自己根据openid生成sessionId,利用sessionId来标识用户,因此我们可以随便使用一个加密算法去实现,sessionId的生成(因为使用加密算法的明文和密文是一一对应的,openid不同自然生成的sessionId也不同,因此可以标识用户),这里我采用的是md5(在hashlib库中)。 sessionId = hashlib,md5(openid.encode(encoding='utf-8')).hexdigest() 然后将sessionId返回给微信客户端,采用json格式发送返回数据,不直接使用flask中的自动包装response,而是自己生成response对象。若要返回json格式的数据,要在返回的headers中设置content-type为application/json。再利用make_response生成返回对象,注意参数无法直接通过字符串写出json格式数据,需要使用jsonify方法(这个方法来自flask中的jsonify库) headers = {'content-type': 'application/json',}response = make_response(jsonify({'sessionId: sessionId'}),200)

到这,登陆验证的基本流程就结束了。

获取到sessionId后,我们每次访问服务器时都要将访问用户进行标识,所以每次访问服务器都要带上sessionId。因此我们需要将sessionId注册到整个微信小程序的全局变量中。实现的方法是整个小程序的app.js中去设置全局变量。 globalData: {userInfo: null,sessionId: null,} globalData的作用是声明全局变量,其中的sessionId就是每次访问服务器需要带上用以标识用户。(我们的标识用户采用的是加密后的openid因此这个与服务器会话的密钥不会改变,因此不会过期)
在实现上如果每次使用小程序都去访问服务器获取sessionId显然是很浪费资源的,因此我们可以利用微信小程序中的缓存功能,将请求到的sessionId缓存到本地。在app.js中OnLaunch()生命周期中写入获取sessionId并设置全局变量的代码。

小程序端的js代码如下:


飞艇稳赚不赔的打法d的生成(因为使用加密算法的明文和密文是一一对应的,openid不同自然生成的sessionId也不同,因此可以标识用户),这里我采用的是md5(在hashlib库中)。 sessionId = hashlib,md5(openid.encode(encoding='utf-8')).hexdigest() 然后将sessionId返回给微信客户端,采用json格式发送返回数据,不直接使用flask中的自动包装response,而是自己生成response对象。若要返回json格式的数据,要在返回的headers中设置content-type为application/json。再利用make_response生成返回对象,注意参数无法直接通过字符串写出json格式数据,需要使用jsonify方法(这个方法来自flask中的jsonify库) headers = {'content-type': 'application/json',}response = make_response(jsonify({'sessionId: sessionId'}),200)

到这,登陆验证的基本流程就结束了。

获取到sessionId后,我们每次访问服务器时都要将访问用户进行标识,所以每次访问服务器都要带上sessionId。因此我们需要将sessionId注册到整个微信小程序的全局变量中。实现的方法是整个小程序的app.js中去设置全局变量。 globalData: {userInfo: null,sessionId: null,} globalData的作用是声明全局变量,其中的sessionId就是每次访问服务器需要带上用以标识用户。(我们的标识用户采用的是加密后的openid因此这个与服务器会话的密钥不会改变,因此不会过期)
在实现上如果每次使用小程序都去访问服务器获取sessionId显然是很浪费资源的,因此我们可以利用微信小程序中的缓存功能,将请求到的sessionId缓存到本地。在app.js中OnLaunch()生命周期中写入获取sessionId并设置全局变量的代码。

小程序端的js代码如下:


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。