手机版

微信小程序登录对接Django后端实现JWT方式验证登录详解

时间:2021-08-21 来源:互联网 编辑:宝哥软件园 浏览:

先上效果图

点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料。

流程

1.使用微信小程序登录和获取用户信息美国石油学会(美国石油协会)接口2.把美国石油学会(美国石油协会)获取的用户资料和密码发送给框架后端3.通过微信接口把密码换取成openid4 .后端将信息作为用户名和密码5.后端通过数据网络令牌方式登录,把代币和用户编号传回小程序6.小程序将代币和用户编号保存在仓库中下次请求需要验证用户身份的页面时,在页眉中加入代币这个字段

微信小程序代码

获取用户信息的方法这里不展示,可以在微信小程序文档中看到

登录方法

login:函数(事件){ wx。登录({成功: RES={控制台。日志(RES)//请求后端换取信息的接口http。请求({ URL : '/get-OpenID/',method: 'POST ',data: { //将密码传到后端jscode: res.code },success: res={ //获取到信息作为账号密码控制台。日志控制台。日志(app。全球数据。用户信息)。请求({ URL : '/wx-log in/',方法: 'POST ',数据: {打开id : RES . open id,session _ key : RES . session _ key,昵称: app.globalData.userInfo。昵称,头像_ URL app。全球数据。用户信息。头像,性别: app。登录成功后返回代币保存在仓库中成功: RES={控制台。日志(RES)//令牌存入存储wx.setStorageSync('jwt_token ',RES . token)wx。setstorageync(' user _ id ',RES . user _ id)这个。refresheuser profile()//登录状态置为没错。setdata({ islogin : true,hasuserinfo : true })app。全球数据。islogin=true } })} })})注销方法

logout:函数{这个。setdata({ islogin : false,hasuserinfo : false })app。全球数据。islogin=false wx。removestorageync(' jwt _ token ')wx。Django removestorageync(' user _ id ')},后端的实现

首先安装djangorestframework-jwt

这里不使用他默认的登录接口,如下所示

它提供了手动签发代币和解密代币的功能,因此最好自己实现

手动签发代币

jwt _ payload _ handler=API _ settings .jwt _有效载荷_处理器jwt _编码_处理器=api_settings .JWT _编码_处理程序有效负载=jwt _有效负载_处理程序(用户)令牌=jwt _编码_处理程序(有效负载)手动解密代币

jwt _ decode _ handler=API _ settings .jwt _解码_处理器用户_字典=jwt _解码_处理器(令牌)用户_id=用户_字典['用户_id']后端换取信息

类OpenID : def _ _ init _ _(self,js代码): self。URL=' https://API。微信。QQ。com/SNS/jscode 2 ession ' self。app _ id=env。字符串(' APPID ')自身。app _ secret=env。str(' APPSECRET ')自身。js代码=jscode def get _ OpenID(self): URL=self。网址?appid=' self。app _ id“secret=”self。app _ secret ' js _ code=' self。js代码' grant _ type=authorization _ code ' RES=requests。get(URL)尝试: open id=RES . JSON()[' OpenID ']session _ key=RES . JSON()[' session _ key ']除了KeyError:返回失败' else:返回打开id,会话密钥后端返回信息接口实现

这里只使用简单的价值视图

注:前端传来的值无法从请求。邮政中接收到,只能使用如下方法

@ require _ http _ methods([' POST '])@ csrf _ excepdef GetOpenIdView(request): data=JSON。加载(请求。body)jscode=data[' jscode ']OpenID,session_key=OpenId(jscode).get_openid()返回JsonResponse({ ' OpenID ' : open id,' session_key': session_key })后端登录接口实现

如果不存在用户则自动创建为了简单,用户名和密码都是信息

@ require _ http _ methods([' POST '])@ csrf _ excepted def log in _ or _ create _ account(request): data=JSON。加载(请求。正文)打印(数据)打开id=数据['打开id ']昵称=数据['昵称]avatar _ URL=数据[' avatar _ URL ']性别=数据['性别']尝试: User=User。物体。获取(用户名=开放id)用户除外。如果用户:用户=用户。物体。get(username=open id)else : user=user。物体。create(用户名=openid,密码=open id,昵称=昵称,头像_ url=头像_url,性别=性别)jwt _ payload _ handler=API _ settings .jwt _有效载荷_处理器jwt _编码_处理器=api_settings .JWT编码处理器有效负载=jwt_payload_handler(用户)令牌=jwt_encode_handler(有效负载)res={“状态”:“成功”,昵称:用户。昵称,' user_id': user.id,' token ' : token }返回JsonResponse(RES)以上就是简单的微信小程序登录对接Django的思路,很多地方不严谨,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:微信小程序登录对接Django后端实现JWT方式验证登录详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。