【问题标题】:Django how can I specify a different authentication method per viewDjango如何为每个视图指定不同的身份验证方法
【发布时间】:2017-09-04 12:27:13
【问题描述】:

和标题说的差不多。

我正在使用 Django 1.11,并且有人要求我将 CAS 设置为某些视图的身份验证方法,并将其余部分保留在 Django 模型身份验证之后或不进行身份验证。

我正在尝试将 django_cas_ng 集成到我的项目中以重定向到 CAS 服务器进行身份验证,但我不知道如何区分视图函数中的 auth 方法。 Django 支持多个身份验证后端,甚至是完全自定义的后端,但我想知道我是否可以为每个视图指定一个单独的身份验证方法(例如使用视图装饰器)。

Django 允许显式指定不同的数据库和缓存,但有没有办法(或应用程序)为身份验证后端启用相同的功能?

【问题讨论】:

    标签: python django authentication cas


    【解决方案1】:

    Django 默认身份验证:

    from django.contrib.auth.decorators import login_required
    
    @login_required(login_url='/accounts/login/')
    class AnyView(AnyViewClass):
        ...
    

    您可以用于 aouth-views:

    from rest_framework.decorators import permission_classes, authentication_classes
    from rest_framework.authentication import BasicAuthentication
    from rest_framework.permissions import IsAuthenticated
    
        @authentication_classes((BasicAuthentication,))
        @permission_classes((IsAuthenticated,))
        class AnyView(APIView):
            ...
    

    对于像 oauth2 这样的任何其他身份验证:

    from oauth2_provider.decorators import protected_resource
    
    @protected_resource()
    class AnyView(APIView):
        ...
    

    对于不要复制粘贴,您可以创建两个具有不同身份验证类型的类并将它们用作其他类的父类。

    【讨论】:

    • 这是特定于 django-rest-framework 的吗?因为我没有在我的应用程序中使用它来做其他事情。只是常规的 django 视图函数。
    • @aalizadeh 第二个变种是的,先试试
    猜你喜欢
    • 2020-06-06
    • 2011-01-22
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2018-06-02
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多