微信小程序python用户认证的实现


Posted in Python onJuly 29, 2019

这里用到django-rest-framework-jwt这个库   https://github.com/GetBlimp/django-rest-framework-jwt

微信小程序python用户认证的实现

按流程图来

先通过wx.login()获取code,再通过我们后台配置的接口获取openid和session_key

// 登录
 wx.login({
  success: res => {
   console.log(res)
   // 发送 res.code 到后台换取 openId, sessionKey, unionId
     wx.request({
      url: api.GET_OPENID, //
      data: {
       js_code: res.code
      },
      success: function (res) {
       var openid = res.data.openid
       var session_key = res.data.session_key
       //获取openid,session_key
       //后台用户表保存
       wx.request({
        url: api.USER,
        method: "POST",
        data: {
         openid : openid,
         session_key : session_kay
        },
        success: function (res) {
         if (res.data.status == 'success') {
          //在缓存中保存用户id和openid备用
          wx.setStorage({
           key: 'userid',
           data: res.data.userid,
          });
          wx.setStorage({
           key: 'openid',
           data: openid,
          })
         } else {
          wx.showModal({
           title: '提示',
           showCancel: false,
           content: '获取openid失败',
          })
         }
        }
       })
      }
     })
  }
 })

在这里的用户表最好是在django自带的user表上进行字段拓展,不然重写起来会很麻烦,拓展方法如下

from django.contrib.auth.models import AbstractUser

# Create your models here.
class User(AbstractUser):
  """
  用户新增字段
  """
  name = models.CharField(max_length=30, null=True, blank=True, verbose_name="姓名")

下面是django的user默认字段,需要保存用户头像,用户省市等字段只要在原有基础上新增即可

微信小程序python用户认证的实现

生成3rd session

先在后台配置jwt

安装 pip install djangorestframework-jwt

在你的settings.py,添加JSONWebTokenAuthentication到Django REST框架DEFAULT_AUTHENTICATION_CLASSES。

REST_FRAMEWORK = {
  'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
  ),
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # <-------
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication',
  ),
}

#JWT设置过期时间,具体配置查看文档
JWT_AUTH = {
  'JWT_VERIFY_EXPIRATION': False
}

#在您urls.py添加以下URL路由以启用通过POST获取令牌包括用户的用户名和密码。

from rest_framework_jwt.views import obtain_jwt_token
#...

urlpatterns = [
  '',
  # ...

  url(r'^api-token-auth/', obtain_jwt_token),
]

通过POST用户的用户名和密码获取token

wx.request({
         url: api.api-token-auth,//url配置
         method: 'POST',
         data: {
          'username': openid,     //这里我是用openid当作用户名
          'password': session_key   //用session_key当作密码
         },
         success: function(jwt) {
          //jwt格式:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InhpZWhhbyIsImV4cCI6MTUzNTM3ODQ2OCwiZW1haWwiOiIzNDg2OTg1ODhAcXEuY29tIn0.8rXFK_K2q8474LxYrCuuNJT93PkZMzi1JX6fVproXrE
          //前面是base64后面是签名,用.隔开
          //将jwt_token放入缓存备用
          var jwt_token = jwt.data.token
          wx.setStorageSync('jwt_token', jwt_token)
          self.globalData.jwt_token = jwt_token
         }
        })

后端配置时需要加上authentication_classes进行认证

from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

# 商品表
class goodsViewSet(viewsets.ModelViewSet):
  queryset = Goods.objects.all()
  serializer_class = goodsSerializers
  filter_class = GoodsFilter
  filter_backends = (DjangoFilterBackend, filters.SearchFilter)
  search_fields = ('name',)
  #认证配置
  permission_classes = (IsAuthenticated,)
  authentication_classes = (JSONWebTokenAuthentication,)

使用方法

在请求加了认证的view时,如果不在head中带入jwt_token,请求401

微信小程序python用户认证的实现

在header中带入请求数据成功

//从缓存中取出jwt_token,并按文档用法拼接,在header中带入Authorization
  // JWT +jwt_token
  var jwt_token = 'JWT ' + wx.getStorageSync('jwt_token')

  wx.request({
   url: 'http://127.0.0.1:8000/mall/goods/',
   header:{
     'Authorization': jwt_token
   },
   success:function(res){
    //成功请求到商品数据
    console.log(res)
   }
  })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的爬虫功能代码
Jun 24 Python
在python中使用正则表达式查找可嵌套字符串组
Oct 24 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
python实现k-means聚类算法
Feb 23 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
python3.6.3转化为win-exe文件发布的方法
Oct 31 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
python实现最小二乘法线性拟合
Jul 19 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
详解Python描述符的工作原理
Jun 11 Python
Python 堆叠柱状图绘制方法
Jul 29 #Python
Django处理Ajax发送的Get请求代码详解
Jul 29 #Python
Django框架视图函数设计示例
Jul 29 #Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 #Python
Python 硬币兑换问题
Jul 29 #Python
django中使用Celery 布式任务队列过程详解
Jul 29 #Python
详解python中自定义超时异常的几种方法
Jul 29 #Python
You might like
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
JS实现小星星特效
2019/12/24 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
python3生成随机数实例
2014/10/20 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
Python 面试中 8 个必考问题
2018/11/16 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
学生安全承诺书
2014/05/22 职场文书
课例研修方案
2014/05/31 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
活动总结新闻稿
2014/08/30 职场文书
委托书如何写
2014/08/30 职场文书
小学生差生评语
2014/12/29 职场文书
贷款收入证明范本
2015/06/12 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书