Nuxt Auth中间件向用户端点发出空请求

时间:2020-04-10 16:24:50

标签: vue.js authentication flask vuex nuxt.js

每个人。我正在尝试构建一个登录模块。我正在使用Nuxt auth处理我的登录工作流程,并为我的RestAPI使用flask。我已经按照docs的规定在nuxt.config.js中设置了auth选项,并根据我的flask API调整了网址,如下所示:

auth: {
    strategies: {
      local: {
        endpoints: {
          login: { url: '/auth/', method: 'post', propertyName: 'token' },
          logout: { url: '/auth/logout', method: 'post' },
          user: { url: '/users/username/', method: 'post', propertyName: 'User' }
        },
        // tokenRequired: true,
        // tokenType: 'bearer'
        // autoFetchUser: true
      }
    }
  }

这是我的登录组件:

<template>
  <div>
    <form @submit.prevent="userLogin">
      <div>
        <label>Username</label>
        <input type="text" v-model="login.username" />
      </div>
      <div>
        <label>Password</label>
        <input type="text" v-model="login.password" />
      </div>
      <div>
        <button type="submit">Submit</button>
      </div>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      login: {
        username: 'newUser27',
        password: 'ninjaTurtles1!'
      }
    }
  },
  methods: {
    async userLogin() {
      try {

        let response = await this.$auth.loginWith('local', { data: this.login })

        console.log(response)
      } catch (err) {
        console.log(err)
      }
    }
  }
}
</script>

现在,我遇到的问题是,当我点击登录按钮以调用“提交表单”并调用我的登录功能时,对登录路径的调用成功,请求包含该表单中的用户名和密码,我得到了回应。如图所示:

Request bodyRequest response

但是,由于请求主体为空,因此用户端点的调用失败,因此服务器无法处理该请求,如下图所示: Empty request body in call to user endpoint.

我想我的问题是我是否存在某种错误配置,导致用户端点的请求正文为空,从而导致我的用户用不了多久并保持this.$auth.loggedInthis.$auth.user为假

我已经尝试的东西:

  • 我尝试将API中的请求切换为Post,以查看是否成功 如上图所示,任何差异都没有。都 获取和发布请求到达API时,其正文为空。
  • 我尝试在用户中将propertyName设置为false 切入点。 As mentioned here。仍然会遇到同样的问题。
  • this.$auth.fetchUser()之后,我尝试从组件的登录功能中使用let response = await this.$auth.loginWith('local', { data: this.login })方法。 As recommended in this answer r。仍然会遇到同样的问题。

任何建议或帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

请设置获取请求nuxt.config以及api端点。谢谢

 user: { url: '/users/username/', method: 'get', propertyName: 'User' }'

答案 1 :(得分:0)

根据登录端点,身份验证必须接收'token' propertyName,但是在您收到'auth'属性作为响应的响应屏幕快照中显示的内容,您应该更改后端以直接返回令牌属性(而不是嵌套属性)或更改登录端点propertyName,可以通过调用

检查令牌设置是否正确
console.log( this.$auth.getToken('local') );