URL ВХОДА Auth0 404 не найден

#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>