Не может найти, куда перенаправляет конечная точка django
tldr; - Есть проект microsoft github django, который я пытаюсь понять. Я пытаюсь понять, где находится код конечной точки /redirect или ведет к для первого проекта под названием 1-authentication. Вот ссылка: https://github.com/Azure-Samples/ms-identity-python-django-tutorial
Я очень новичок в django и переношу веб-приложение flask, которое я сделал, на django. Конкретная конечная точка, которую я пытаюсь найти, это код конечной точки /redirect.
Конкретная проблема Я пытаюсь выяснить, куда Microsoft/Azure помещает вас после завершения процесса регистрации.
Я хочу узнать, где находится код этой конечной точки, чтобы я мог заставить ее перенаправить на конечную точку под названием /closeauth. /closeauth - это html файл, который я сделал, чтобы сделать пробный блок, чтобы проверить, используете ли вы outlook, если вы не используете outlook, но используете веб, он вышвырнет вас на обычную домашнюю конечную точку /. Однако, если вы используете outlook, он отправит сообщение обратно на родительскую веб-страницу, чтобы сообщить outlook об успешной аутентификации, после чего родительская веб-страница попытается перейти на /.
Чтобы понять, что я имею в виду, вот пример во flask с файлом app.config файлом и конечной точкой перенаправления, который является именно тем кодом, который я ищу django:
app_config.py:
import os
REDIRECT_PATH = "/getAToken"
app.py для примера flask
@app.route(app_config.REDIRECT_PATH)
def authorized():
try:
cache = _load_cache()
result = _build_msal_app(cache=cache).acquire_token_by_auth_code_flow(
session.get("flow", {}), request.args)
if "error" in result:
return render_template("auth_error.html", result=result)
session["user"] = result.get("id_token_claims")
_save_cache(cache)
except ValueError: # Usually caused by CSRF
pass # Simply ignore them
return redirect(url_for("closeauth"))
Однако я не могу найти, где это /redirect находится в django.
для тестирования кода, о котором я говорю, используйте эту ссылку microsoft github https://github.com/Azure-Samples/ms-identity-python-django-tutorial.
Я использую первый проект 1-authentication и изменил код для этого. Но я все еще не могу понять, где находится код перенаправления, чтобы направить перенаправление в другое место ПОСЛЕ аутентификации в Microsoft.
В комплекте с "Прочитай меня" написано:
- В модуле приложения
Sample/urls.pyподключаются необходимые конечные точки MSAL:
```python
from ms_identity_web.django.msal_views_and_urls import MsalViews
...
msal_urls = MsalViews(settings.MS_IDENTITY_WEB).url_patterns()
...
path(f'{settings.AAD_CONFIG.django.auth_endpoints.prefix}/', include(msal_urls)),
```
- Приведенный выше код устанавливает middlwares и подключает все необходимые конечные точки для процесса аутентификации в ваше приложение Django под префиксом маршрута (
/authпо умолчанию). Например, конечная точка перенаправления находится по адресу/auth/redirect.- Когда пользователь переходит по адресу
./auth/sign_inи завершает попытку входа, полученные идентификационные данные помещаются в сессию, доступ к которой можно получить через объект запроса по адресуrequest.identity_context_data.
но я не могу найти, где находится код /auth/redirect, чтобы изменить точку окончания с / на /closeauth
Я также проверил файл msal_views_and_urls.py и не увидел, куда переходит /auth/redirect.
try:
from django.urls import path
from django.shortcuts import redirect
from django.urls import reverse
except:
pass
import logging
class MsalViews:
def __init__(self, ms_identity_web):
self.logger = logging.getLogger('MsalViewsLogger')
self.ms_identity_web = ms_identity_web
self.prefix = self.ms_identity_web.aad_config.django.auth_endpoints.prefix + "/"
self.endpoints = self.ms_identity_web.aad_config.django.auth_endpoints
def url_patterns(self):
return [
path(self.endpoints.sign_in, self.sign_in, name=self.endpoints.sign_in),
path(self.endpoints.edit_profile, self.edit_profile, name=self.endpoints.edit_profile),
path(self.endpoints.redirect, self.aad_redirect, name=self.endpoints.redirect),
path(self.endpoints.sign_out, self.sign_out, name=self.endpoints.sign_out),
path(self.endpoints.post_sign_out, self.post_sign_out, name=self.endpoints.post_sign_out),
]
def sign_in(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.sign_in}: request received. will redirect browser to login")
auth_url = self.ms_identity_web.get_auth_url(redirect_uri=request.build_absolute_uri(reverse(self.endpoints.redirect)))
return redirect(auth_url)
def edit_profile(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.edit_profile}: request received. will redirect browser to edit profile")
auth_url = self.ms_identity_web.get_auth_url(
redirect_uri=request.build_absolute_uri(reverse(self.endpoints.redirect)),
b2c_policy=self.ms_identity_web.aad_config.b2c.profile)
return redirect(auth_url)
def aad_redirect(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.redirect}: request received. will process params")
return self.ms_identity_web.process_auth_redirect(
redirect_uri=request.build_absolute_uri(reverse(self.endpoints.redirect)),
afterwards_go_to_url=reverse('index'))
def sign_out(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.sign_out}: signing out username: {request.identity_context_data.username}")
return self.ms_identity_web.sign_out(request.build_absolute_uri(reverse(self.endpoints.post_sign_out))) # send the user to Azure AD logout endpoint
def post_sign_out(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.post_sign_out}: clearing session for username: {request.identity_context_data.username}")
self.ms_identity_web.remove_user(request.identity_context_data.username) # remove user auth from session on successful logout
return redirect(reverse('index')) # take us back to the home page
Примечание: У меня очень странное чувство, что никто не знает, о чем я говорю. Если это так, то я избавлюсь от MS аутентификации, которая поставляется с тестовым приложением django отсюда https://github.com/Azure-Samples/ms-identity-python-django-tutorial и вместо этого буду использовать библиотеку msal, которая использовалась во flask.
Итак, я выяснил, где находится код редиректа, но я надеюсь, что кто-то еще может добавить свой вклад, так как я просто гадал и мне повезло.
В readme сказано:
В модуле приложения
Sample/urls.pyнеобходимые конечные точки MSAL >подключены:from ms_identity_web.django.msal_views_and_urls import MsalViews ... msal_urls = MsalViews(settings.MS_IDENTITY_WEB).url_patterns() ... path(f'{settings.AAD_CONFIG.django.auth_endpoints.prefix}/', >include(msal_urls)),
Я щелкнул правой кнопкой мыши на .url_patterns() из переменной msal_urls, которая находилась в файле urls.py. Это привело меня к файлу msal_views_and_urls.py, который был установлен в моем python. Оттуда я увидел функцию в классе, которая, похоже, была тем, что я искал:
def aad_redirect(self, request):
self.logger.debug(f"{self.prefix}{self.endpoints.redirect}: request received. will process params")
return self.ms_identity_web.process_auth_redirect(
redirect_uri=request.build_absolute_uri(reverse(self.endpoints.redirect)),
afterwards_go_to_url=reverse('index'))
Я изменил afterwards_go_to_url=reverse('index')) на afterwards_go_to_url=reverse('closeauth')) и он заработал локально.
Однако я предполагаю, что это не будет работать для развертывания. Возможно, мне придется протестировать venv и посмотреть, смогу ли я управлять этим файлом.
Если у кого-то есть более подробная информация об этом, дайте мне знать.