代码之家  ›  专栏  ›  技术社区  ›  milan

在授权头中设置令牌

  •  1
  • milan  · 技术社区  · 7 年前

    我想在授权头中设置令牌,但令牌设置为空。我试图从chrome存储中获取令牌,但是没有设置令牌,尽管我在控制台 result['user_token'] 回拨内部。

    这是密码

    var token = null; // i need this token in fetchTopics as well
    function fetchCurrentUser() {
      const apiUrl = `api2.navihq.com/get_current_user`;
      chrome.storage.sync.get(['user_token'], function(result) {
        token = result['user_token'];
      });
      console.log('token', token); // getting null
      const headers = new Headers();
      headers.append('Content-Type', 'application/json');
      headers.append('Authorization', `Token: ${token}`)
      fetch(apiUrl, {
        method: 'GET',
        headers
      })
      .then(function(response) {
        console.log('response', response);
        return response.json()
      })
      .then(function(data) {
        console.log('data', data);
        return JSON.parse(atob(data.user))
      })
    }
    
    
    $(window).bind('load', function() {
        document.addEventListener('click', init);
      fetchCurrentUser();
      fetchTopics();
    });
    

    现在如何在授权头中设置令牌?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Jaromanda X    7 年前

    这个 sync 在里面 chrome.storage.sync.get 并不意味着是同步的

    事实上它需要一个回调,这表明它是 同步-当然,不是说回调可以保证某些东西是异步的,但在这种情况下,很明显

    所以把钱拿来 里面 回拨

    function fetchCurrentUser() {
        const apiUrl = `api2.navihq.com/get_current_user`;
        chrome.storage.sync.get(['user_token'], function(result) {
            var token = result['user_token'];
            console.log('token', token); // getting null
            const headers = new Headers();
            headers.append('Content-Type', 'application/json');
            headers.append('Authorization', `Token: ${token}`)
            fetch(apiUrl, {
                method: 'GET',
                headers
            }).then(function(response) {
                console.log('response', response);
                return response.json()
            }).then(function(data) {
                console.log('data', data);
                return JSON.parse(atob(data.user))
            })
        });
    }
    

    或者,您可以“promisify”chrome.storage.sync.get函数

    function fetchCurrentUser() {
        const chromeStorageGetPromise = key => 
            new Promise(resolve => chrome.storage.sync.get(key, resolve));
    
        const apiUrl = `api2.navihq.com/get_current_user`;
        chromeStorageGetPromise(['user_token'])
        .then(({user_token: token}) => {
            console.log('token', token);
            const headers = new Headers();
            headers.append('Content-Type', 'application/json');
            headers.append('Authorization', `Token: ${token}`);
            return fetch(apiUrl, {
                method: 'GET',
                headers
            });
        }).then(response => {
            console.log('response', response);
            return response.json();
        }).then(data => {
            console.log('data', data);
            return JSON.parse(atob(data.user));
        })
    }