【问题标题】:IONIC can't set tokenIONIC 无法设置令牌
【发布时间】:2019-12-26 06:40:25
【问题描述】:

我正在尝试发送发布请求,因此我正在检索我存储的令牌,但我无法在我的请求函数中使用它,它返回 [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;
      }),
    );
  }

【问题讨论】:

标签: javascript angular ionic-framework


【解决方案1】:

已解决

基于我的问题中的更新 1,现在我可以像这段代码一样获取我的令牌,我的问题就解决了。

'Authorization': 'Bearer' + " " + this.token.success.token

不需要JSON.stringify()JSON.parse()

感谢所有帮助。

【讨论】:

    【解决方案2】:

    本地存储仅支持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
    }); 
    

    【讨论】:

    • 但是如果我更改我的令牌集,它是否会与我的应用程序的其他部分混淆?例如,我正在使用此令牌来验证用户登录页面保护,例如:'Authorization': this.token["token_type"] + " " + this.token["access_token"],如果我更改该部分,我应该稍后更改所有其他功能吗?
    • 如果我只使用'Authorization': 'Bearer' + " " + JSON.stringify(this.token['token']) 会怎样,你觉得行得通吗?
    • 在本地存储中设置令牌时,您能否使用console.log(token) 的输出更新您的问题?现在你没有存储令牌值,你只是存储[object Object] 字符串。
    • @mafortis - 你可以看到响应对象是 {'success': {'token': ...}}.因此,在存储令牌时,将其存储为 this.storage.setItem('token', token.success.token); 让我知道这是否有效。
    • 好吧,我试过JSON.stringify(token.success.token)它甚至没有创建应用程序它说没有这样的success然后我尝试JSON.stringify(token)ibb.co/MMMsr2Dthis.storage.getItem('token').then((token) => { this.token = JSON.parse(token);然后它返回[object object] 所以基本上我认为我的令牌存储方式没有任何问题,但我尝试获取它的方式。
    【解决方案3】:

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

    我是这样解决的:

    获取令牌的函数(在名为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());
    }
    

    希望对你有帮助!

    【讨论】:

    • 谢谢老兄,但它需要对我的代码进行大量更改,我认为必须有更简单的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2021-03-10
    • 2017-04-15
    • 2016-02-22
    • 2019-04-26
    • 2020-04-27
    • 2019-01-12
    相关资源
    最近更新 更多