1

如果我有一个 url: <host>/login/?token=<valid_backend_token>,那么我的后端生成valid_backend_token身份验证令牌在哪里。使用这个令牌,我几乎可以为我的用例做任何我想做的事情(包括获取用户配置文件等)。有没有办法可以使用此令牌在 Nuxt 中对用户进行身份验证?

目前,我尝试过这样的事情:

  mounted() {
    if (this.$route.query.token) {
      this.$axios
        .get("/profile/", {
          headers: {
            Authorization: "Token " + this.$route.query.token,
          },
        })
        .then((resp) => {
          this.$axios.setToken(this.$route.query.token, "Token");
          this.$auth.setUser(resp.data);
          this.$router.push("/");
        });
    }
  },

当然,这不会验证我的用户(因为$auth.loggedIn是假的)。$auth.user当然设置,我可以访问配置文件页面(如果我禁用auth中间件)。除了$auth.loggedIn错误之外,我$this.axios.get/put/etc.还会抛出错误(即使在我的情况下不需要刷新令牌并且我已经设置了它):

ExpiredAuthSessionError:令牌和刷新令牌都已过期。您的请求已中止。

我怎样才能使这个身份验证工作?

4

1 回答 1

0

所以我又拿了一个,我能够解决这个问题,如下所示:

在以下位置定义一个新策略(从local方案开始)nuxt.config.js

auth: {
  strategies: {
    local: {...},
    social: { // new strategy
      scheme: "local",
      token: {
        property: "auth_token",
        name: "Authorization",
        type: "Token",
      },
      user: {
        property: false,
      },
      endpoints: {
        login: { url: "social/token/login/", method: "post" },
        logout: { url: "auth/token/logout", method: "post" },
        user: { url: "/profile/", method: "get" },
      }
    }  
  }
  redirect: {...},
}

然后,在我的用户使用 url 中的令牌登陆的页面中,我执行以下操作:

  mounted() {
    if (this.$route.query.token) {
      this.$auth.loginWith("social", {
        data: { token: this.$route.query.token },
      });
    }
  },

此时 nuxt-auth ( auth-next) 为我处理一切。端点social/token/login/实际上只是回显了相同的标记。

于 2021-05-13T22:35:56.903 回答