Правильный способ извлечения кода из магазина Vue для входа на страницу.vue

#vue.js #vuejs3

Вопрос:

Я хочу знать, какую часть кода я должен удалить из магазина и добавить в Login.vue

И как я могу выбросить ошибки проверки, возвращаемые из API в хранилище, чтобы я мог обработать их на странице Login.vue

Войти.vue

 <template>My login form is here</template>

<script>
import { AUTH_AUTHENTICATE } from "@/modules/auth/store/index";

methods: {
    loginFormSubmit() {
        /** AFTER LOGIN SUCCESS FROM STORE,
            WHAT CAN I HANDLE HERE SO THAT MY STORE IS CLEAN 
        */

        this.$store.dispatch(AUTH_AUTHENTICATE, this.loginForm);
        
    }
}
</script>
 

src/модули/аутентификация/хранилище/индекс

 export const AUTH_AUTHENTICATE = "/api/auth/authenticate";

actions: {
    [AUTH_AUTHENTICATE]: ({ commit }, loginForm) => {
        toolsApi.get("/sanctum/csrf-cookie").then(() => {
            toolsApi
                .post("/api/auth/authenticate", loginForm)
                .then(response => {
                    if (response.data.status == "success") {
                        const token = `Bearer ${response.data.data.token}`;

                        Cookie.set("AUTH-TOKEN", token);

                        toolsApi.defaults.headers.common.Authorization = Cookie.get(
                            "AUTH-TOKEN"
                        );

                        commit("loginStatus", true);
                        this.$router.push({ name: "dashboard.index" });
                    }
                })
                .catch(error => {
                    console.log("Error");
                    console.log(error);
                });
        });
    }
}
 

Любые рекомендации по исправлению моего кода действительно мне очень помогут

/**** ОБНОВЛЕНИЕ ***/

Ответ на ошибку от API

 {
    "status": "error",
    "message": "Validation errors.",
    "errors": {
        "email": [
            "The email field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}
 

В Магазине

 toolsApi
    .post("/api/auth/authenticate", loginForm)
    .then(response => {
        if (response.data.status == "success") {
            const token = `Bearer ${response.data.data.token}`;

            Cookie.set("AUTH-TOKEN", token);

            toolsApi.defaults.headers.common.Authorization = Cookie.get(
                "AUTH-TOKEN"
            );

            commit("setLoginStatus", true);
            resolve(response.data.data);
            // this.$router.push({ name: "dashboard.index" });
        }
    })
    .catch(error => {
        reject(error);
    });
 

Ответ №1:

Попробуйте вернуться toolsApi.get(...) из [AUTH_AUTHENTICATE] действия, а затем получите доступ к нему, как обещано. Еще один способ вызвать исключение в действии и поймать его на странице входа в систему.

Комментарии:

1. Привет @Daniel, я пытался это сделать. Но не повезло. Я не смог выдать ошибки проверки для магазина. Я обновил фрагмент кода. Пожалуйста, проверьте