认证

发布时间 2023-09-06 16:50:00作者: 别管鱼油我了

认证组件

认证有什么用:

  一些接口,想限制登录的后才能访问,没登录不能访问

  做登录认证,限制如果没登录,不允许访问该接口

 

drf中认证类如何使用:

  1、写一个类,继承BaseAuthentication

  2、类中重写:authenticate方法

  3、在authenticate完成登录认证,如果登录了,返回两个值,第一个值是request.user,如果能拿的出就是登录了,拿不出就是未登录,抛异常

  4、在视图类中配置使用

      class BookView(ViewSet):

        authentication_classes = [LoginAuth]

 

认证小结:

  1、认证类的使用:

    配置在视图类上:局部使用

    配置文件中配置:全局使用——所有接口必须登录后才能使用(值得注意的是,这里的全局使用也包含了登录本身,所以要对登录进行局部禁用)

全局使用(配置文件中):
REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'app01.auth.LoginAuth'
            ],
        }

局部禁用:

class UserView(ViewSet):
        authentication_classes = []

2、写的认证类:要重写authenticate方法,必须返回两个参数:

  当前登录用户返回:第一个参数是user_token.user,第二个参数是用户的 token

  在视图类中显示的是:request.user(认证类的第一个参数),request.auth认证类返回的第二个参数

3、如果认证失败就抛异常

  AuthenticationFailed,会被def捕获处理,不会报错到前端

4、前端传入的token,如何取:

  后端定的,我们项目是从请求地址中取,还可以从请求头或者请求体中取

5、update_or_create方法:

   update_or_create(self, defaults=None, **kwargs)

    如果defaults有值就是更新

    如果defaults没有值就是新增