繁体   English   中英

如何使用授权承载 + 令牌使用 Axios 注销用户

[英]How to log user out with Axios using authorization bearer + token

我有一个应用程序,我通过连接到后端(使用 axios)并获取存储在 localStorage 中的 JWT 令牌来登录用户。 我的问题来自注销功能。 我目前这样做:


async endAuth(context) {
    try {
      await axios.post("auth/logout", {
        headers: {
         Authorization:
            "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
        },
      });
      localStorage.clear();
      context.commit("setUser", {
        token: null,
        userId: null,
      });
    } catch (e) {
      const error = new Error("Something went wrong");
      throw error;
    }
}

这不起作用。 与 API 的连接已建立,但我从后端收到 401 错误, {success: false, message: 'Expired or Invalid Token'}

现在我尝试将"Content-Type": "application/json",到标题中仍然没有运气。

我还更改了我的代码以在fetch() API 中使用 JavaScript 构建。 这有效! 这是代码:

async endAuth(context) {
  let url = baseURL + "/auth/logout";
  const response = await fetch(url, {
      method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization:
        "Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
    },
    });
    const responseData = await response.json();
    if (!response.ok) {
      const error = new Error(
        responseData.message || "Failed to authenticate. Check your login data."
      );
      throw error;
    } else {
      localStorage.clear();
      context.commit("setUser", {
        token: null,
        userId: null,
      });
    }
}

我还尝试通过axios.defaults.headers.common["Authorization"] = "Bearer " + localStorage.getItem("currentUser").token;设置 axios 标头axios.defaults.headers.common["Authorization"] = "Bearer " + localStorage.getItem("currentUser").token; - 不走运 我是否在 axios 请求中遗漏了什么?

一般的简短解决方案:

// previus logout
this.$axios.setHeader('Authorization', `Bearer ${localStorage.getItem("token")}`);
// after logout
this.$axios.setHeader('Authorization', null)
  

具体长解(问题):

 async endAuth(context) {
        try {
          this.$axios.setHeader('Authorization', `Bearer ${JSON.parse(localStorage.getItem("currentUser")).token}`);
          await axios.post("auth/logout");
          localStorage.clear();
          context.commit("setUser", {
            token: null,
            userId: null,
          });
          this.$axios.setHeader('Authorization', null)
        } catch (e) {
          const error = new Error("Something went wrong");
          throw error;
        }
    }

这只是用nuxt发生在我身上,我希望其他人有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM