首页 > 热点 > 微信 > 正文

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

2024-07-22 01:17:51
字体:
来源:转载
供稿:网友

先上效果图


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

流程

1.使用微信小程序登录和获取用户信息Api接口
2.把Api获取的用户资料和code发送给django后端
3.通过微信接口把code换取成openid
4.后端将openid作为用户名和密码
5.后端通过JSON web token方式登录,把token和用户id传回小程序
6.小程序将token和用户id保存在storage中
下次请求需要验证用户身份的页面时,在header中加入token这个字段

微信小程序代码

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

登录方法

login: function(event) { wx.login({  success: res => {  console.log(res)  //请求后端换取openid的接口  http.request({   url: '/get-openid/',   method: 'POST',   data: {   //将code传到后端   jscode: res.code   },   success: res => {   //获取到openid作为账号密码   console.log(res)   console.log(app.globalData.userInfo)   http.request({    url: '/wx-login/',    method: 'POST',    data: {    openid: res.openid,    session_key: res.session_key,    nickname: app.globalData.userInfo.nickName,    avatar_url: app.globalData.userInfo.avatarUrl,    gender: app.globalData.userInfo.gender    },    //登录成功后返回token保存在storage中    success: res => {    console.log(res)    //token存入storage    wx.setStorageSync('jwt_token', res.token)    wx.setStorageSync('user_id', res.user_id)    this.reFreshUserProfile()    //登录状态置为true    this.setData({     isLogin: true,     hasUserInfo: true    })    app.globalData.isLogin = true    }   })   }  })  } }) }

注销方法

 logout: function(res) { this.setData({  isLogin:false,  hasUserInfo:false }) app.globalData.isLogin = false wx.removeStorageSync('jwt_token') wx.removeStorageSync('user_id') },

Django后端的实现

首先安装djangorestframework-jwt

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


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

手动签发token

 jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER payload = jwt_payload_handler(user) token = jwt_encode_handler(payload)

手动解密token

 jwt_decode_handler = api_settings.JWT_DECODE_HANDLER user_dict = jwt_decode_handler(token) user_id = user_dict['user_id']

后端换取openid

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表