首页 文章

Nuxt auth模块不会将登录用户设置为存储状态

提问于
浏览
0

我目前正在Nuxt Auth Module的帮助下开展身份验证功能 .

在前端我正在运行Nuxt Js,在后端我正在运行Laravel 5.7

在nuxt.config.js我已设置auth设置:

auth: {
  strategies: {
      local: {
          endpoints: {
              login: { url: 'login', method: 'post', propertyName: 'access_token' },
              logout: { url: 'logout', method: 'post' },
              user: { url: 'user', method: 'get', propertyName: 'user' },
          }
      },
       tokenRequired: true,
       tokenType: 'bearer',
  }

},

在我的index.vue中,我有一个带有登录方法的表单:

<template>
    <div>
      <div>
        <b-container>
          <b-row no-gutters>
            <b-col col lg="12">

            </b-col>
          </b-row>
          <b-row no-gutters>
            <b-col col lg="12">
                <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="120px" class="demo-ruleForm" label-position="top">
                  <el-form-item label="Email" prop="email">
                    <el-input v-model="ruleForm.email" ></el-input>
                  </el-form-item>
                  <el-form-item label="Password" prop="password">
                    <el-input type="password" v-model="ruleForm.password" autocomplete="off"></el-input>
                  </el-form-item>
                  <el-form-item>
                    <el-button type="primary" @click="login">Inloggen</el-button>
                    <!--<el-button @click="resetForm('ruleForm2')">Reset</el-button>-->
                  </el-form-item>
                </el-form>
            </b-col>
          </b-row>
        </b-container>
      </div>
    </div>
    </template>

    <script>
        export default {
            layout: 'login',
            data() {
                var validatePass = (rule, value, callback) => {
                    if (value === '') {
                        callback(new Error('Vul een wachtwoord in'));
                    } else {
                        callback();
                    }
                };
                return {
                    ruleForm: {
                        email: '',
                        password: '',
                    },
                    rules: {
                        password: [
                            { validator: validatePass, trigger: 'blur' }
                        ],
                        email: [
                            { required: true, message: 'Vul een email in', trigger: 'blur' },
                            { type: 'email', message: 'Vul een correct email adres in', trigger: ['blur'] }
                        ]
                    }
                };
            },
            methods: {

                async login() {
                    try {
                        await this.$auth.loginWith('local', {
                            data: {
                                username: this.ruleForm.email,
                                password: this.ruleForm.password
                            }
                        }).then(() => {
                                this.$router.push({ name: 'dashboard'})
                            })
                    } catch (e) {
                        console.log(e)
                    }
                },
            }
        }
    </script>

当我尝试登录时,正在调用异步函数“login” . 返回与用户名和密码对应的用户 . 我唯一的问题是,当我查看vuex状态时,auth.loggedIn保持为false并且auth.user保持未定义状态 .

我以为Nuxt Auth会自动更新状态,还是我错过了什么?

任何帮助将不胜感激:D

1 回答

  • 0

    我终于找到了解决方案 . 我不得不将用户 endpoints 的属性名设置为false

    旧版

    endpoints: {
              login: { url: 'login', method: 'post', propertyName: 'access_token' },
              logout: { url: 'logout', method: 'post' },
              user: { url: 'user', method: 'get', propertyName: 'user' },
          }
    

    新版本

    endpoints: {
              login: { url: 'login', method: 'post', propertyName: 'access_token' },
              logout: { url: 'logout', method: 'post' },
              user: { url: 'user', method: 'get', propertyName: false },
          }
    

    现在用户被加载到该状态

相关问题