Идентификация — представление Django, которое принимает пользователей как с аутентификацией, так и без аутентификации.Python

Программы на Python
Ответить
Anonymous
 Идентификация — представление Django, которое принимает пользователей как с аутентификацией, так и без аутентификации.

Сообщение Anonymous »

Я интегрировал Azure AD с Django с помощью пакетаidentity[django] (документация).
Он предоставляет декоратор @login_required, который используется для ограничения просмотра только для пользователей, прошедших проверку подлинности AD. Оформленная функция просмотра должна принимать дополнительный контекст параметра, который содержит информацию AD.
Я написал собственный декоратор, который создает объект пользователя Django, используя информацию 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')

Код: Выделить всё


{% if user.is_authenticated %}
Welcome, {{ user.username }}!
{% endif %}


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

Подробнее здесь: https://stackoverflow.com/questions/791 ... auth-users
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»