zoukankan      html  css  js  c++  java
  • 【Python web 开发】django rest framwork 的token 登录和原理(2)

    django rest framwork api guid 关于认证的有这么多种方式

     先看默认的 authentication  api guid

    REST_FRAMWORK:{ }  是整个django rest framwork 整个的变量配置中心

    SessionAuthentication实际上是使用了django里面的sessionMiddleware

    每当一个request 进来的时候,这两个meddleware就会将我们的cookie里的session_id转换成request.user

    rest_framework/authentication.py源码解读:

    其中的antuenticate 就是从我们的request中取出的user,实际上还依赖的是我们django 自带的session 机制

     django rest framwork 给我们提供了三种不同的认证模式 

     sessionAuthentication 常用的是浏览器当中,因为浏览器会自动的设置cookie。并将cookie和session带到我们的服务器当中,所以前后端分离的系统我们很少用到这种。

    重点是 tokenAuthentication

      下面我们来介绍下 tokenAuthentication

    ps: 所有有表的app 都要添加到 install_apps 里面 来,不然migration 的时候会报错,不会帮我们生成数据库表的

    添加apps 后,接下来我们进行migration migrate  ,进入数据库我们看到生成了一张authtokne_token 的表

    这里面的 user_id  是一个外键,是指向到我们的userprofile 里面的

    然后再来配置url (这个主要是生成token的一个url)

    接下来我们就用postman 模拟请求这个url

     

     这样我们就生成一个token了

    下一步,怎么拿到token?

    加一行

    断点调试,是可以获取到用户的user 信息的

    request.data 中存放着用户从前端post 过来的数据,request只将post和field中的东西放在我们的data中

    head中设置的token 会被放进request auth 中

    想要知道用户传递过来的auth 时只需要request.auth

    django源码中的sessionMiddleware中有一个process_request方法
    和一个process_response方法。

     django/contrib/sessions/middleware.py:

     

    但是django rest framwork 是有很多的弊端的:

    1、因为django rest framwork 生成的token是保存在一台服务器上的,如果后续我们要做分布式系统或者两套系统共用一套token认证,那么就要实时的同步用户信息,这样就很麻烦

    2、这种认证模式没有过期时间,安全性很低!

     因此我们后续就引进了  jwt  认证模式  json web  token 

     

  • 相关阅读:
    springboot笔记(五章)整合持久层技术
    Java基础复习(一)
    springboot复习
    JUC(2)
    JUC(1)
    springboot笔记(一~四章)入门、基础配置、整合视图技术、整合Web开发
    JVM复习
    NIO(New IO)
    hive 函数
    hive基础知识
  • 原文地址:https://www.cnblogs.com/yuanyuan2017/p/10045187.html
Copyright © 2011-2022 走看看