小程序验证授权功能实现,小程序登录和授权

  小程序验证授权功能实现,小程序登录和授权

  椰子汁笔记,欢迎指正

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

  让服务器获取用户的openid。服务器生成sessionId并发送给客户端,这是客户端和服务器之间的会话密钥。

  第一步:客户端将代码发送给服务器(代码是通过调用微信api获取的),通过调用wx.login()获取。代码的值在返回结果的代码字段中。然后使用wx.request()将代码发送到服务器。注意使用GET方法请求服务器,并将代码放在数据字段中。wx . log in({ success:function(RES){ if(RES . code){ wx . request({ URL: 3358192 . 168 . 26 . 190 . 5000/,数据:{code: res.code},)}}}用代码请求微信api获取openid。注意GET方法上传的参数是request.agrs[],(注意这个请求来自flask中的请求)。然后对openid请求微信提供的api。微信服务器提供的接口地址是:

  https://api.weixin.qq.com/sns/jscode2session?appid=appid secret=appsecretjs _ code=code grant _ type=authorization _ codeurl查询部分的参数就是上面提到的三条信息。如果请求参数合法,接口将返回以下字段。

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

  在创建小程序时,你使用的AppId可能只是一个测试号,需要在开发者工具中查看,用上面页面的appId替换。这样的appid和AppSecret请求api获取openid。然后请求api获取openid。注意,这里使用的请求来自python,与flask无关。

  Requests库,在json解析请求的结果后,可以在openid字段中获得用户的openid。r=requests . get( https://API . weixin . QQ . com/SNS/jscode 2 session?Appid=% s secret=% sjs _ code=% s grant _ type=authorization _ code %(你的appid ,对应的appsecret ,小程序获取的代码))openid=r.json () [OpenID]第三步实际上已经可以用OpenID标识用户,可以直接返回给客户端,以后的访问服务器操作可以用OpenID参数携带,但是OpenID是一个非常隐私的用户数据。微信小程序推荐服务器根据openid生成自己的sessionId,并使用sessionId来识别用户,所以我们可以使用任何加密算法来实现。sessionId的生成(因为使用加密算法的明文和密文是一一对应的,openid自然生成的sessionId是不一样的,所以可以识别用户)。在这里,我使用md5(在hashlib库中)。SessionId=hashlib,MD5(OpenID . encode(encoding= UTF-8 ))。然后Hexdigest()将会话id返回给微信客户端,并将返回的数据以json格式发送。它不是直接使用flask中的自动打包响应,而是生成自己的响应对象。要以json格式返回数据,请在返回的头中将content-type设置为application/json。然后使用make_response生成返回的对象。注意参数不能直接通过字符串写json格式的数据。你需要使用jsonify方法(该方法来自flask中的jsonify库)headers={ content-type : application/JSON ,} response=make _ response(JSON ify({ session id:session id }),200)这里,登录验证的基本流程就结束了。

  得到sessionId后,我们每次访问服务器都要标识访问用户,所以每次访问服务器都要带上sessionId。所以我们需要在整个微信小程序的全局变量中注册sessionId。实现方法是在整个小程序的app.js中设置全局变量。全局数据:{userinfo: null,sessionId: null。} GlobalData用于声明全局变量,其中需要sessionid在每次访问服务器时标识用户。(我们的身份用户使用的是加密的openid,所以这次和服务器的会话的密钥不会改变,所以不会过期。)

  在实现上,如果每次使用小程序都要访问服务器获取sessionId,显然是一种资源浪费,所以我们可以利用微信小程序中的缓存功能,将请求的sessionId缓存到本地。编写代码获取sessionId,并在app.js的OnLaunch()生命周期中设置全局变量,applet端的js代码如下:

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: