Angular 7: отправка запроса всегда отправляет нулевое тело - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь понять эту проблему, которая у меня возникла уже несколько дней, поэтому я хочу отправить запрос на публикацию с именем пользователя и паролем, используя angular 7 для api nodejs rest для аутентификации, но он отправляет пустое тело, вот метод входа в системув authservice.ts:

login(username: string, password: string): Observable<any> {

        let httpOptions = {
            headers: new HttpHeaders({
                'Content-Type': 'application/json',
                'Accepts': 'application/json'
            })
        };
        return this.http.post<any>(
            `${this.HOST_DOMAINE}/bo/api/authenticate`,
            {
                'username': username,
                'password': password
            },
            httpOptions
        );

    }

и вот способ отправки его в auth.component.ts:

signin() {

        this.loading = true;
        this.submitted = true;
        if (this.loginForm.invalid) {
            this.loading = false;
            return;
        }

        this._authService.login(
            this.loginForm.controls.username.value,
            this.loginForm.controls.password.value)
            .subscribe(
                data => {
                    console.log(data);
                    if (data['done'])
                        this._router.navigate([this.returnUrl]);
                    else {
                        this.showAlert('alertSignin');
                        this._alertService.error(data['msg'] + "");
                        this.loading = false;
                    }
                },
                error => {
                    console.log(error);
                    this.showAlert('alertSignin');
                    this._alertService.error(error.message);
                    this.loading = false;
                }
            );
    }

Я искал решение, но все, что я пробовал, неработать, и я не знаю, что я скучал здесь.Примечание: я новичок

1 Ответ

0 голосов
/ 07 февраля 2019

Для тех, кто сталкивается с той же проблемой, здесь временное решение!Итак, я обнаружил, что это была проблема перекрестного происхождения, вот обходной путь:

login(username: string, password: string): Observable<any> {

        let httpOptions = {
            headers: new HttpHeaders({
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            }),
            params: new HttpParams()
                .set("username", username)
                .set("password", password),
            withCredentials: true
        };
        return this.http.post<any>(
            `${this.HOST_DOMAINE}/bo/api/authenticate`,
            null,
            httpOptions
        );

    }

Я устанавливаю параметры в параметрах заголовка http с учетными данными как 'include' и заменяю тип контента из json на форму-рленкодированный в промежуточном программном обеспечении nodejs, я разрешил перекрестное происхождение вот фрагмент:

app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", req.get('origin'));
    res.header('Access-Control-Allow-Credentials', true);
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

это сработало, но все еще нуждается в проверке на происхождение

...