当前位置: 首页 > 知识库问答 >
问题:

vue.js - vue 登录鉴权的问题,错误返回的问题?

韦原
2024-02-01

使用vue2 做前端的登录页面时。 当用户名密码错误时,每次都进入了loginView.vue 的.then部门内容,提示登录成功。
我的具体代码如下。1.请各位大神,指正一下,如何修改。2.在这种从api-->store->views 调用传递中,如何保证异常、数据的正确传递,我该怎么优化我的代码?不胜感激

api/auth.js 接口调用

import axios from "axios";export default {    login: function (credentials) {        return axios.post(localhost + 'login', credentials)        .then(({ data }) => data) // 只返回数据部分,也可以不处理直接返回整个响应        .catch(error => Promise.reject(error)); // 将错误原样返回,以便上层调用者可以处理    }}

store/auth.js

import AuthApi  from '@/api/auth'import axios from 'axios'// 定义模块名export const auth = {    state: {        user: null    },    getters: {        // !! just converts the value to a boolean        isLogged: state => !!state.user    },    mutations: {        setUserData(state, userData) {            state.user = userData            localStorage.setItem('user', JSON.stringify(userData))            axios.defaults.headers.common.Authorization = `Bearer ${userData.token}`        },        clearUserData() {            localStorage.removeItem('user')            location.reload()        }    },    actions: {        login({ commit }, credentials) {            AuthApi.login(credentials)                .then(({ data }) => {                    commit('setUserData', data)                    return data; // 这里返回数据用于后续操作(可选,视业务需求)                }).catch(error => {                    console.log(error)                    throw error; // 将错误重新抛出,让组件能够捕获                })        },        logout({ commit }) {            commit('clearUserData')        }    },}

views/LoginView.vue

<script>export default {    data() {        return {            email: '',            password: '',        }    },    methods: {        login() {            this.$store.dispatch('login', {                email: this.email,                password: this.password            })                .then(() => {                    alert('登录成功')                    this.$router.push({ name: '/' })                })                .catch((error) => {                    alert(error.response.data.error)                    console.log(error)                })        }    }}</script>

后端接口,用户名, 密码错误时的返回信息
image.png

共有1个答案

逄嘉木
2024-02-01

这些逻辑其实不用考虑其他人使用,写的人知道就完事了。

我说个改动点哈

axios.defaults.headers.common.Authorization = `Bearer ${userData.token}`
这个其实应该封装一个独立的 request,比如 axios.create 一个新实例,而不应该给 axios 直接赋值。有可能会有一些请求不需要 Authorization

至于你说的进入到首页的问题,就是你没有做拦截器,然后接收的时候也没判断 message 是否存在,一般我们会在拦截器做拦截,然后统一的异常透出

 类似资料:
  • 1.游戏加载流程 2.鉴权概念 3.重要概念 3.1全局变量GameStatusInfo 游戏加载流程 游戏加载主要分为两个阶段,准备阶段是由手Q进行,开发者无需理会,执行阶段为开发者可控制的阶段。 引擎启动后,会从手Q和后台中获取当前游戏id(gameId),用户id(openId)等信息,并将这些参数写入到js引擎的全局变量GameStatusInfo中,并执行游戏对应的main.js文件。开

  • 在vue的项目中,前端请求后端的接口,数据返回了,状态是200,但是在axios的拦截器里走了error()的回调,这是为什么呢?! 返回的是一个文件流,盲猜是返回的文件的格式不对,不知道要咋改

  • 作为一个新的主题,我已经建立了一个Ubuntu 12网络服务器,根目录是 /var/www/包含我的脚本index.php和一个名为“减少”的子目录,包含一个二进制文件(一个计算机代数系统,文件名也是“减少””)。 使用ssh,我可以作为root用户和我的非管理员用户帐户以及cd登录到/var/www/目录,并通过执行“/reduce/reduce”启动二进制文件。但是,如果我对索引做同样的事情。

  • 我正在构建angular2应用程序,目前我有一个家庭组件与菜单栏和路由器出口的主要内容。我添加了登录机制,所以如果用户没有经过身份验证,那么登录页面将显示在整个屏幕上,登录后用户将被路由到上面结构的主/主组件。 当我运行登录页面加载的应用程序时,成功验证后,它会将我路由到主页,但在加载菜单的主页(如Dashboard1、Dashboard2、Report1等)中,链接无法正常工作。当我点击任何菜单

  • 我可以通过重新启动服务器并尝试重新登录来重现此问题。我在开发模式和生产模式中测试了这个问题,得到了相同的行为。

  • 问题内容: 您好,我是python的新手,想知道您是否可以帮我一些忙。我一直在玩这段代码,似乎无法使其正常工作。 现在,isPrime方法的输出如下: 我确定该函数应返回true,然后应打印“是”。我想念什么吗? 问题答案: 您将放弃递归调用的返回值: 您也想传播递归调用的值,包括一条语句: 现在,您的代码将输出: