Laravel护照,Axios在bootstrap.js中设置令牌

时间:2018-04-05 13:42:29

标签: laravel authentication laravel-5 axios

我制作了一个 Laravel REST api ,我用 axios (在vue应用程序中)调用了。我在服务器端制作了 laravel passport 身份验证,因此我必须将'Authorization:Bearer xxx ...'插入到ajax调用的标头中。

我想,我让我的代码尽可能干,所以在我的bootstrap.js(我启动了axios)中制作了这段代码:

function getTokens() {
    axios.get('/oauth/personal-access-tokens')
            .then(response => {
                  // window.usertokens = response.data;
                  if(response.data && response.data[0]&& response.data[0].id) {
                    var tokenid = response.data[0].id;
                    var auth = 'Bearer ' + tokenid;
                    window.axios.defaults.headers.common['Authorization'] = auth;
                    window.authToken = auth;
                    if(window.axios.defaults.headers.common['Authorization']) {
                      console.debug("token has been set succesfully. (token=" + window.axios.defaults.headers.common['Authorization'] + ")");
                    }
                  }
              //
            }).catch(e => {
              console.error("gettoken errror: " + e);
            });
};

在控制台上我写了授权设置,但是当我检查ajax调用的标题时,没有授权。

我知道问题是基于异步调用.. 是否有任何解决方案,为了做得好? (有一次我问令牌和套装)。

提前做出建议和回应!

1 个答案:

答案 0 :(得分:1)

您可能不应该使用默认标头。通过自己管理承载令牌并在每次调用的配置对象中提供它,您将获得更严格的控制。

function getTokens() {
    axios.get('/oauth/personal-access-tokens')
            .then(response => {
                  // window.usertokens = response.data;
                  if(response.data && response.data[0]&& response.data[0].id) {
                    var tokenid = response.data[0].id;
                    var auth = 'Bearer ' + tokenid;
                    store.axiosConfig = { headers : { 'Authorization' : auth }}
                  }
              //
            }).catch(e => {
              console.error("gettoken errror: " + e);
            });
};

然后从一些Vue组件中使用它......

// this will run whenever you assign the config, and not before!
watch:{
    'store.axiosConfig' : function(){
        if(this.store.axiosConfig)
            axios.get('http://some-url',null,this.store.axiosConfig);
    }
}