Identity - Django View, принимающий пользователей как с авторизацией, так и без нее.

Я интегрировал Azure AD с Django с помощью пакета identity[django] (docs). Он предоставляет декоратор @login_required, который используется для ограничения представления только для аутентифицированных пользователей AD. Декорируемая функция представления должна принимать дополнительный параметр context, содержащий информацию об AD.

Я написал пользовательский декоратор, который создает объект Django User, используя информацию AD, предоставленную контекстом идентификации.

def custom_login_required(f):
    @wraps(f)
    @settings.AUTH.login_required
    def wrapped(request, context=None, *args, **kwargs):
        if context:
            request.user = get_ad_synced_user(context)
        return f(request, context=context, *args, **kwargs)
    return wrapped

@custom_login_required
def home(request, *, context):
    return render(request, 'home.html')
<html>
  <body>
    {% if user.is_authenticated %}
      <p>Welcome, {{ user.username }}!</p>
    {% endif %}
  </body>
</html>

Однако я хочу создать представление, которое принимает как аутентифицированных, так и неаутентифицированных пользователей. Если пользователь не аутентифицирован, он должен отображать ссылку на страницу входа, а если пользователь аутентифицирован, то он должен отображать приватные ссылки.

Используя объект Django User, я могу получить доступ к request.user.is_authenticated, но поскольку идентификация создает отдельный объект context (который получает информацию об AD только при оформлении с помощью @login_required), я не уверен, как я могу установить request.user для текущего запроса из предыдущего.

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