Перенаправление не разрешено для предварительного запроса - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть проблема, когда я получаю ответ при попытке использовать API отдыха: «Доступ к выборке в« https://kollektivet.app:8082/api/login/' из источника »https://kollektivet.app' заблокирован политикой CORS: Ответ на предварительный запрос не проходит проверку контроля доступа: перенаправление не разрешено для предварительного запроса. "

Изображение ответа при попытке получить

Это происходит, когда я пытаюсь использовать остальные API, которые я использую. Из того, что я прочитал, эта ошибка означает, что я пытаюсь перенаправить, а я нет.

Бэкэнд - Django и выглядит так:

    @csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def register(request,):
        password = request.data.get("password", "")
        email = request.data.get("email", "")
        if not email and not password and not email:
            return Response(
                data={
                    "message": "username, password and email is required to register a user"
                },
                status=status.HTTP_400_BAD_REQUEST
            )
        new_user = User.objects.create_user(
            email=email, password=password
        )
        return Response(status=status.HTTP_201_CREATED)

И интерфейс находится в реакции, которая выглядит следующим образом:

createUser(event) {
        event.preventDefault();

        let data = {
            name: this.state.name,
            password: this.state.password,
            repeatPassword: this.state.repeatPassword,
            email: this.state.email
        };

        if (this.state.name !== '' && this.state.password !== '' && this.state.email !== '' && this.checkPasswords()) {
            console.log('name', this.state.name, 'password ', this.state.password, 'email ', this.state.email);
                fetch("https://kollektivet.app:8082/api/register/", {
                    method: 'POST',
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json',
                    },
                    mode: "cors",
                    body: JSON.stringify(data)
                })
                    .then(response => response.json())
                    .then(data => console.log(data))
                    .catch(error => console.log(error));
            this.setState({message: "Du er nå registrert! For å aktivere din konto trykk på linken som vi har sendt til deg på epost"});
            this.setState({name: ""});
            this.setState({password: ""});
            this.setState({repeatPassword: ""});
            this.setState({email: ""});

        }
    }

У меня есть это файл настроек Django:

CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

Я запускаю это на apache2, если это актуально. Порт 8082 также закрыт. Должно ли это быть открыто, когда оно находится на том же сервере?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

У меня была такая же проблема, пока я не обнаружил, что перенаправление было вызвано структурой интернационализации Django, где все URL-адреса получают расширение URL-адреса i18n, такое как /en/path_to_resource, когда фактически запрашивается path_to_resource. Структура интернационализации достигает этого путем перенаправления 302.

Решением этой проблемы является сохранение URL-адресов rest-api вне раздела с помощью i18n_patterns. В результате urls.py может выглядеть как

urlpatterns = [
    path('i18n/', include('django.conf.urls.i18n')),
    path('rest/', include(('rest.urls', 'rest'), namespace='rest')),
]

urlpatterns += i18n_patterns(
    path('admin/', admin.site.urls),
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    path('my_app/', include(('my_app.urls', 'my_app'), namespace='my_app')),
)
0 голосов
/ 09 ноября 2018

Вы перенаправлены на site.site.comapi / register /

У вас есть какое-нибудь другое промежуточное ПО, которое делает это?Может быть, в конфигурации Apache?

Обратите внимание, что это 301 , поэтому ваш браузер кэшировал этот ответ и теперь всегда будет перенаправлять туда, даже если вы передали код, который привел к этому перенаправлению, или даже если выостановите Django от запуска.

Так что вам нужно будет также очистить кеш перенаправления в браузере.

Вот почему мне не нравятся ответы 301 . 302 гораздо вежливее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...