Django : Как мы можем настроить декоратор login_required?

Я хочу переписать декоратор входа в Django для проверки аутентификации Azure AD. Для аутентификации я использовал учебник (https://docs.microsoft.com/en-us/graph/tutorials/python). Я не знаю, как работать с группами и разрешениями, поскольку я использую эту аутентификацию, поэтому я беру имя пользователя, фамилию в качестве пароля, чтобы создать пользователя в модели User django.

Для этого я модифицирую функцию обратного вызова из учебника :

def callback(request):
  
    # Make the token request
    result = get_token_from_code(request)

    #Get the user's profile
    user = get_user(result['access_token'])

    # Store user
    store_user(request, user)

    # Get user info
    # user attribute like displayName,surname,mail etc. are defined by the 
    # institute incase you are using single-tenant. You can get these 
    # attribute by exploring Microsoft graph-explorer.

    username = user['displayName']
    password = user['surname']
    email = user['mail']

    try:
        # if use already exist
        user = User.objects.get(username=username)

    except User.DoesNotExist:
        # if user does not exist then create a new user
        user = User.objects.create_user(username,email,password)
        user.save()

    user = authenticate(username=username,password=password)

    if user is not None:
        login(request,user)
        messages.success(request,"Success: You were successfully logged in.")
        return redirect('home')
    return redirect('home')

Если я хочу проверить, аутентифицирован ли пользователь в Azure AD, я должен сделать что-то вроде этого :

if request.session.get('user').get('is_authenticated') :

Но я не знаю, как совместить с аутентификацией django, чтобы проверить и то и другое. Кто-нибудь может мне помочь

Спасибо

Самым простым способом будет использование декоратора user_passes_test для создания собственной функции и применение ее в качестве декоратора к вашим представлениям как указано в документации

from django.contrib.auth.decorators import user_passes_test

def check_azure(user):
    # so something here to check the azure login which should result in True/False 
    return #theResult of your check

@user_passes_test(check_azure)
def my_view(request):
    ...

Вот мое решение :

from django.shortcuts import redirect


def authenticated_user(view_func) :
    def wrapper_func(request, *args, **kwargs):

        if request.user.is_authenticated and request.session.get('user').get('is_authenticated') :
    
            return view_func(request, *args, **kwargs)

        else : 

            return redirect('login')

    return wrapper_func
Вернуться на верх