#python-3.x #django #auth0
#python-3.x #django #auth0
Вопрос:
Перепечатка с https://community.auth0.com/t/login-url-404-not-found/52181
Я настроил приложение auth0. Я также пытаюсь настроить поток аутентификации веб-приложения и поток авторизации кода;
Я следую этой статье: https://auth0.com/docs/quickstart/webapp/django для реализации потока веб-приложений Auth0.
Чтобы реализовать поток авторизации бэкэнд-кода, я следую: https://auth0.com/docs/quickstart/backend/django
Реализации находятся в этом файле: apps/auth_zero/auth0backend.py чтобы написать как стандартный поток веб-приложений, так и поток авторизации кода. какие подпрограммы / login/auth0 как auth0/ login / auth0; проверьте основные URL-адреса приложений.
Но я получаю 404 not found, когда нажимаю Login: я настроил приложение auth0. Я также пытаюсь настроить поток аутентификации веб-приложения и поток авторизации кода;
Я следую этой статье: https://auth0.com/docs/quickstart/webapp/django для реализации потока веб-приложений Auth0.
Чтобы реализовать поток авторизации бэкэнд-кода, я следую: https://auth0.com/docs/quickstart/backend/django
Реализации находятся в этом файле: apps/auth_zero/auth0backend.py чтобы написать как стандартный поток веб-приложений, так и поток авторизации кода. какие подпрограммы / login/auth0 как auth0/ login / auth0; проверьте основные URL-адреса приложений.
Но я получаю 404, который не найден, когда я нажимаю Login:
Я подозреваю, что в моих настройках что-то не так;
Репозиторий для ссылки: https://github.com/Xcov19/covidX/tree/1777fe574c640c31db587e361c32758bc0c175d2/covidX
это мое промежуточное программное обеспечение:
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
# Map username from the Access Token payload to
# Django authentication system
"django.contrib.auth.middleware.RemoteUserMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
Это мои серверные и auth0 конфигурации jwt:
# SOCIAL AUTH AUTH0 BACKEND CONFIG
SOCIAL_AUTH_TRAILING_SLASH = os.getenv("SOCIAL_AUTH_TRAILING_SLASH")
SOCIAL_AUTH_AUTH0_KEY = os.environ.get("SOCIAL_AUTH_AUTH0_KEY")
SOCIAL_AUTH_AUTH0_SECRET = os.environ.get("SOCIAL_AUTH_AUTH0_SECRET")
SOCIAL_AUTH_AUTH0_SCOPE = ["openid", "profile", "email"]
SOCIAL_AUTH_AUTH0_DOMAIN = os.environ.get("SOCIAL_AUTH_AUTH0_DOMAIN")
SOCIAL_AUTH_ACCESS_TOKEN_METHOD = os.getenv("ACCESS_TOKEN_METHOD")
JWT_AUDIENCE = os.getenv("JWT_AUDIENCE")
if AUDIENCE := (
os.getenv("AUTH0_AUDIENCE") or f"https://{SOCIAL_AUTH_AUTH0_DOMAIN}/userinfo"
):
SOCIAL_AUTH_AUTH0_AUTH_EXTRA_ARGUMENTS = {"audience": AUDIENCE}
# Set JWT_AUDIENCE to API identifier and the JWT_ISSUER to Auth0 domain
JWT_AUTH = {
"JWT_PAYLOAD_GET_USERNAME_HANDLER": (
"apps.auth_zero.auth0backend." "jwt_get_username_from_payload_handler"
),
"JWT_DECODE_HANDLER": "apps.auth_zero.auth0backend.jwt_decode_token",
"JWT_ALGORITHM": "RS256",
"JWT_AUDIENCE": JWT_AUDIENCE,
"JWT_ISSUER": "https://dev-mavl72j2.eu.auth0.com/",
"JWT_AUTH_HEADER_PREFIX": "Bearer",
}
AUTHENTICATION_BACKENDS = {
"apps.auth_zero.auth0backend.Auth0",
"django.contrib.auth.backends.ModelBackend",
"django.contrib.auth.backends.RemoteUserBackend",
"guardian.backends.ObjectPermissionBackend",
}
LOGIN_URL = "/auth0/login/auth0"
LOGIN_REDIRECT_URL = "/"
AUTH_REDIRECT_URI = "/auth0/complete/auth0"
Я использую drf, его настройки:
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly",
"rest_framework.permissions.AllowAny",
],
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_jwt.authentication.JSONWebTokenAuthentication",
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.BasicAuthentication",
),
"DEFAULT_RENDERER_CLASSES": [
"rest_framework.renderers.BrowsableAPIRenderer",
"rest_framework.renderers.JSONOpenAPIRenderer",
],
}
Комментарии:
1. Я не уверен, почему вы испытываете все трудности, чтобы устранить конечные косые черты. Не могу не задаться вопросом, связано ли это с вашей проблемой. Если вы удалите все это и измените свой re_path на
path('auth0/', ...)
, это что-нибудь изменит?2. @Melvyn любой из абсолютных путей пытался работать без сбоев или без сбоев. ранее это было. я добавил код авторизации drf и настройки. Я подозревал, что это проблема. Спецификация OpenAPI не нуждается в дополнительных косых чертах, поэтому повторный
3. Спецификация OpenAPI не заботится о косых чертах, возможно, используемом вами автогенераторе, но сама спецификация этого не делает. Обратите внимание, что это всего лишь генератор документации — если это усложняет ситуацию (как это очевидно), найдите другой или исправьте его неправильное поведение. Теперь ваши URL-адреса будут соответствовать сегментам пути, в которых отсутствует разделитель. Например:
/auth0completeauth0
будет маршрутизироваться так же, как/auth0/complete/auth0
и любой вариант. Но мы не по теме.4. я собираюсь попробовать @Melvyn и вернуться к u завтра
5. @Melvyn путь re заключается в том, чтобы разрешить путь open api yaml, который я включаю в файл openapi yaml, отправляемый на прокси-сервер службы Google, для принятия пути маршрута
Ответ №1:
Ваша проблема в том, что у вас есть маркер конца строки в вашем re_path, поэтому он не будет соответствовать и делегировать URL-адреса auth0:
re_path(r"^auth0/?$", include("apps.auth_zero.urls")),
Не соответствует /auth0/something
, только /auth0/
или /auth0
. Потеряйте маркер конца строки.
Комментарии:
1. ах, теперь это может быть. я уже упоминал, что завтра я вернусь с обновлением. слишком поздно ночью rt nw. Спасибо
Ответ №2:
Насколько я понимаю, Auth0 теперь предпочитает метод POST, а GET устарел. В rails это должно быть:
= button_to "Login", auth0_login_path, method: :post
Или в обычном HTML:
<form method="post" action="/auth/auth0">
<input type="submit" value="Login" />
</form>