ionic 3标头未向服务器发送授权“承载“令牌””

时间:2018-06-26 11:45:34

标签: ionic-framework header ionic3 authorization http-get

我正在执行一个使用用户名和密码的登录屏幕。 如果登录成功,服务器将返回一个令牌。 然后我试图调用另一个函数来获取用户信息,但未传递授权标头。 我在邮递员上尝试我的服务器方法及其工作正常,所以我认为问题出在标题中。有人可以建议我该怎么做吗?

let url = urlConst.Login;
let params1 = new HttpParams();

let loader = this.loadingcontroller.create({
  content: stringEngConst.signinngin
});

let attributes = {
  username: this.uname.value.toLowerCase(),
  password: this.password.value,
  grant_type: "password"
};

var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let body = 'username=' + this.uname.value.toLowerCase() + '&password=' + this.password.value + '&grant_type=password';
let data: Observable < any > = this.http.post(url, body, {
  headers: headers
});

loader.present().then(() => {

      data.subscribe(result => {
            if (result.access_token != null) {

              this.signintoken = result.access_token;
              this.storage.set(storageConst.SIGN_IN_TOKEN, result.token_type + " " + result.access_token);
              headers.append('Authorization', 'Bearer ' + this.signintoken);
              let url1 = 'http://localhost:57940/API/Account/GetUserInfo/';
              let info: Observable < any > = this.http.get(url1, {
                headers: headers
              });

              info.subscribe(result => {
                /*Do Something*/
              });
            }

请注意,result.access_token!= null为true。并且我成功地获得了令牌。但是不会再次传递给第二个URL(信息)

2 个答案:

答案 0 :(得分:0)

看起来像这样的帖子可能会为您解决问题:https://stackoverflow.com/a/47805759/6599076

您可能要使用:

headers = headers.append('Authorization', 'Bearer ' + this.signintoken);

答案 1 :(得分:0)

您使用的标题与第一个http请求相同:

var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

根据后续调用的终点,可能需要设置不同的标头:

尝试使用以下方法创建新的标题

var headers2 = new HttpHeaders();
headers.append('Content-Type', 'application/json');

或者完全摆脱Content-Type,这取决于您的终点期望。

另外,如果您使用的是Ionic 3,则值得检查使用的是哪个Http模块(HttpClient或更旧的模块),因为它们倾向于处理请求选项的方式有所不同。