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
для текущего запроса из предыдущего.