微信小程序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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
基于Python __dict__与dir()的区别详解
Oct 30 Python
python操作列表的函数使用代码详解
Dec 28 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
Python小程序 控制鼠标循环点击代码实例
Oct 08 Python
python取均匀不重复的随机数方式
Nov 27 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Python flask框架实现查询数据库并显示数据
Jun 04 Python
Python列表的深复制和浅复制示例详解
Feb 12 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
Zerg兵种介绍
2020/03/14 星际争霸
PHP 中的面向对象编程:通向大型 PHP 工程的办法
2006/12/03 PHP
php过滤表单提交的html等危险代码
2014/11/03 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
python基础教程之对象和类的实际运用
2014/08/29 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
中学教师岗位职责
2013/11/26 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
小学英语教学反思案例
2014/02/04 职场文书
甘南现象心得体会
2014/09/11 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
公司门卫岗位职责
2015/04/13 职场文书
社区党员干部承诺书
2015/05/04 职场文书
优质护理心得体会
2016/01/22 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书