Vuejs / Vue-auth Token在IE中从localStorage中删除,Edge在Chrome和FF中工作

时间:2018-02-15 15:23:29

标签: javascript vuejs2 jwt

使用VUE 2和插件vue-auth(https://github.com/websanova)。无论出于何种原因,在IE和Edge中,auth令牌都会在页面刷新时从localStorage中删除,但是在Chrome中,FF一切正常,并且不会删除令牌。

我一直在开发chrome并且即将推出产品。正在其他浏览器中进行测试,然后在开发阶段结束时遇到这种情况。使用他们的文档,我基本上没有任何实际的改变。

Vue.use(require('@websanova/vue-auth'), {
  auth: require('@websanova/vue-auth/drivers/auth/bearer.js'),
  http: require('@websanova/vue-auth/drivers/http/axios.1.x.js'),
  router: require('@websanova/vue-auth/drivers/router/vue-router.2.x.js'),
  refreshData: {enabled: false},
});

Vue.auth.login({
        method: 'post',
        data: {email: payload.email, password: payload.password, rememberMe: true},
      }).catch(error => {
        console.log('error happened');
        console.log(error);
      })

打开IE,转到页面,登录,查看localStorage default_auth_token存在。 点击F5 用户被注销。 Vuew localStorage和default_auth_token消失了。

在IE中完全相同。

我没有使用他们的插件做任何自定义,然后禁用refesh令牌选项,因为我们不使用它们。

我知道这可能是一个很长的机会,但是我已经尝试过使用github问题(https://github.com/websanova/vue-auth/issues/309)无效。

1 个答案:

答案 0 :(得分:0)

我...恨...... IE ......

如果一个cookie有一个localhost域(没有三个点域,例如foo.bar.com),那么IE和Edge只会让它掉线而不会出错。 Cookie未保存,您不知道原因。

function setCookie (name, value, timeOffset) {
  var domain = this.options.cookieDomain();
  var expires = (new Date((new Date()).getTime() + timeOffset)).toUTCString();
  if (domain === 'localhost'){
    document.cookie = name + '=' + value + '; Expires=' + expires + ';Path=/;';
  } else {
    document.cookie = name + '=' + value + '; Expires=' + expires + ';Path=/; Domain=' + domain + ';';
  }  
}

这花了我一整天来浏览这个插件,但现在我真的明白它是如何工作的。我通常是一个后端python开发人员,所以这很有启发性。