заблокировано политикой CORS: поле заголовка запроса access-control-allow-methods не разрешено Access-Control-Allow-Headers в предполетном ответе - PullRequest
0 голосов
/ 11 июля 2020
async onSubmit(e) {
    e.preventDefault();
    axios.post('http://127.0.0.1:8000/auth/token/login',{
        email:this.state.email,
        password:this.state.password,
    }).then(res => {
        localStorage.setItem('token', JSON.stringify(res.data));
        this.props.history.push('/protcted')
    });
console.log("resgister!");
// console.log(resd.json());

}

asyn c componentDidMount () {

    if (!this.state.logged_in) {
        this.props.history.push('./login')
    }
  console.log(user));

    if (this.state.logged_in) {
        fetch('http://localhost:8000/auth/users/me', {
            method: 'GET',
            headers: {
                "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, 
               Accept, Authorization",
                "Access-Control-Allow-Methods": "*",
                "Authorization": `Token ${localStorage.getItem('token')}`,
                "Content-Type": 'application/x-www-form-urlencoded',
                "withCredentials": true,
                "Access-Control-Allow-Origin":"*",
                'X-Requested-With': 'XMLHttpRequest'
                
            }
        })
            .then(res => JSON.stringify(res.data))
            .then(json => {
                this.setState({ username: json.username });
            });
    }


}

settings.py

INSTALLED_APPS = [
'authapp',
'rest_framework',
'djoser',
'rest_framework.authtoken',
'corsheaders',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

]

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

CORS_ORIGIN_ALLOW_ALL = True

введите описание изображения здесь

регистрация завершена, работает этот URL-адрес localhost, но вход в систему не работает. И в этом onSubmit Метод полностью рабочий токен действительно хранится в localStorage, но я пытаюсь аутентифицироваться с помощью этого токена, я получаю эту ошибку.

И сюрприз в том, что я запрашиваю http://localhost: 8000 / auth / users / me этот URL в Postman, затем я получить данные

вы можете увидеть на этой фотографии по данной ссылке

введите описание изображения здесь

1 Ответ

0 голосов
/ 11 июля 2020

Список разрешенных заголовков по умолчанию в django-cors-headers не включает access-control-allow-headers.

Access-Control-Allow-Origin, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Allow-Credentials, Access-Control-Allow-Methods и Access-Control-Allow-Headers - это заголовки HTTP, которые могут быть отправлены обратно для запросов контроля доступа .

Запрос должен быть без них. Кроме того, credentials параметр должен быть настроен как отдельная запись в параметрах fetch init, чтобы разрешить отправку файлов cookie в другие домены.

        headers: {
            "Authorization": `Token ${localStorage.getItem('token')}`,
            "Content-Type": 'application/x-www-form-urlencoded',
            'X-Requested-With': 'XMLHttpRequest'   
        },
        credentials: 'include'
...