【问题标题】:Angular 5 HTTPClient Basic Authorization not workingAngular 5 HTTPClient 基本授权不起作用
【发布时间】:2018-11-03 17:22:35
【问题描述】:

我正在尝试在 Angular 5 中实现基本授权。我正在使用 HttpClient 和 HttpHeaders。我正在尝试使用 REST 服务连接到 tomcat 服务器。

此代码在我的登录功能中。

this.storage.set('credentials', credentials);
return new Promise((resolve, reject) => {
    let headers = new HttpHeaders();
    //btoa permet d'encoder le username et le mot de passe en base64
    headers = headers.append("Authorization", "Basic " + btoa(credentials.username + ':' + credentials.password));
    headers = headers.append("Content-Type", "application/x-www-form-urlencoded");

    //utilisation de stateless pour ne créer qu'une session http et ne pas créer une session par requete
    this.http.post(apiUrl+'ADUser', JSON.stringify({l: credentials.username, p: credentials.password}),{ headers:headers })
      .subscribe(res => {
        resolve((res: Response) => res.json());
      }, (err) => {
        console.log(err);
        reject();
        let alert = this.alertCtrl.create({
        title: 'L\'authentification a échoué',
        subTitle: 'Le nom d\'utilisateur ou le mot de passe est incorrect',
        buttons: ['OK']
      });
      alert.present();
      });
});    

This is from the Chrome tools Network tab

查看论坛和本网站后,我还没有找到解决问题的方法。 有人可以帮我解决这个问题吗?

提前感谢您的回复和帮助我的时间

【问题讨论】:

  • 如果我没记错的话,Angular 的 post 请求第二个参数应该是一个对象,而不是字符串,也许删除 JSON.stringify
  • 感谢您的回复。 this.http.post(apiUrl+'ADUser', credentials,{ headers:headers})如果我这样做,它也不起作用

标签: angular rest authorization httprequest


【解决方案1】:

这是我用来发布带有凭据的数据的一段代码:

postData(appurl: string, data: string) {

    let body = new URLSearchParams();
    body.set("data", encodeURIComponent(data));

    const opt = {
      headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'),
      withCredentials: true
    };

    return this.http.post(appurl, body.toString(), opt);

}

我希望这会有所帮助...

顺便说一句,我使用 HttpClientModule

import { HttpClientModule } from '@angular/common/http';

这是一个 GET 示例:

getData<T>(func: string) {
    let opts = this.getOptions(func);
    return this.http.get<T>(this.app.url, opts);
}

getOptions(func: string) {
    let opts = {
        params: new HttpParams().set("func", func).set("nodeid", this.app.nodeid),
        headers: new HttpHeaders(),
        withCredentials: true
    };
    return opts;
}

【讨论】:

  • 谢谢你,这个工作对我来说是一个帖子。我怎样才能对获取请求做同样的事情?
  • 我在使用 chrome 时出错:当请求的凭据模式时,响应中的“Access-Control-Allow-Origin”标头的值不能是通配符“*”是“包括”。因此,Origin 'localhost:8100' 不允许访问。 XMLHttpRequest发起的请求的凭证模式由withCredentials属性控制。你知道该怎么做吗?
  • 您可以查看此stackoverflow.com/questions/8074665/… 或创建一个新问题。对于这种跨域问题,我将 ng serve 与代理设置一起使用,例如 ng serve --proxy-config proxy.conf.json。
  • 如果这回答了您的问题,您可以将其标记为答案吗?谢谢
猜你喜欢
  • 2018-02-04
  • 2023-04-09
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多