IONIC无法设置令牌

时间:2019-08-21 03:03:43

标签: javascript angular ionic-framework

我正在尝试发送帖子请求,因此我正在检索存储的令牌,但无法在我的请求函数中使用它返回[object object]

代码

token: any; //to be used in post request

  constructor(
    private http: HttpClient,
    private env: EnvService,
    private storage: NativeStorage,
  ) {
    this.storage.getItem('token').then((token) => {
      this.token = token; //set token value
      console.log('token', token); // will get the token in console
    }); 
  }

  store(
    name: String,
    description: String,
    phone: String,
    province_id: String,
    kota_id: String,
    address: String,
    logo: String,
    banner: String,
  ) {
    const headers = new HttpHeaders({
      'Accept': 'application/json, text/plain',
      'Content-Type': 'application/json',
      'Authorization': 'Bearer' + " " + this.token //return [object object]
    });
    console.log('header', headers);

    return this.http.post(this.env.STORES_URL,
      { name: name, description: description, phone: phone, province_id: province_id, kota_id: kota_id, address: address, logo: logo, banner: banner }, { headers: headers }
    )
  }
  

PS:我已经评论了每个部分,以便您可以更好地了解   问题来自哪里。

有什么想法吗?

更新

我一直在使用这段代码,如果我使用

'Authorization': 'Bearer' + " " + JSON.stringify(this.token)

我会得到类似的东西

Authorization: Bearer {"success":{"token":"eyJ0eXAiOiJK....

仍然需要前进到令牌数组{"success":{"token":"

现在有什么主意吗?**

更新2

关于此处的评论请求,是我的令牌如何存储(在用户登录时)

login(email: String, password: String) {
    return this.http.post(this.env.BASE_URL + '/login',
      { email: email, password: password }
    ).pipe(
      tap(token => {
        console.log(token);
        this.storage.setItem('token', token)
          .then(
            () => {
              console.log('Token Stored');
            },
            error => console.error('Error storing item', error)
          );
        this.token = token;
        this.isLoggedIn = true;
        return token;
      }),
    );
  }

3 个答案:

答案 0 :(得分:0)

我有一个类似的问题,是因为存在异步问题。

我这样解决:

获取令牌的函数(在名为 global 的类中:

getToken() {
    return this.storage.get(this.token_key);
  }

然后创建标题的函数:

async getHeaders() {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + await this.global.getToken()
      })
    };
    return httpOptions;
  }

当我给 post 打电话时:

async post(route, postdata){
    this.http.post(route, postData, await this.getHeaders());
}

希望有帮助!

答案 1 :(得分:0)

本地存储仅支持string数据类型。

因此,当将令牌存储在本地存储中时,请使用JSON.stringify()将对象转换为字符串:

this.storage.setItem('token', JSON.stringify(token));

从本地存储中读取令牌时,请使用JSON.parse()从字符串转换回来:

this.storage.getItem('token').then((token) => {
      this.token = JSON.parse(token); //set token value
      console.log('token', token); // will get the token in console
}); 

答案 2 :(得分:0)

已解决

基于我提出的问题中的更新1,我现在可以像这样的代码获取令牌,并且我的问题已解决。

Variable Groups
- Variable Group Name: SQL
- Variable Name: providerName 
- Variable Value: SQLProvider


- Variable Group Name: Oracle
- Variable Name: providerName 
- Variable Value: OracleProvider

不需要'Authorization': 'Bearer' + " " + this.token.success.token JSON.stringify()

感谢所有帮助。