当前位置:首页 > VUE

如何基于vue实现登录

2026-02-21 14:35:40VUE

安装Vue及相关依赖

确保已安装Node.js环境,通过npm或yarn初始化Vue项目。推荐使用Vue CLI创建项目:

npm install -g @vue/cli
vue create vue-login-demo
cd vue-login-demo

安装路由和状态管理库(如Vuex):

npm install vue-router vuex axios

设计登录页面组件

src/components下创建Login.vue文件,包含表单结构:

如何基于vue实现登录

<template>
  <div class="login">
    <form @submit.prevent="handleSubmit">
      <input v-model="username" type="text" placeholder="用户名" required />
      <input v-model="password" type="password" placeholder="密码" required />
      <button type="submit">登录</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    handleSubmit() {
      this.$store.dispatch('login', {
        username: this.username,
        password: this.password
      })
    }
  }
}
</script>

配置Vuex状态管理

src/store/index.js中设置登录逻辑:

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    token: localStorage.getItem('token') || '',
    status: ''
  },
  mutations: {
    AUTH_SUCCESS(state, token) {
      state.status = 'success'
      state.token = token
    },
    AUTH_ERROR(state) {
      state.status = 'error'
    }
  },
  actions: {
    login({ commit }, userData) {
      return new Promise((resolve, reject) => {
        axios.post('/api/login', userData)
          .then(res => {
            const token = res.data.token
            localStorage.setItem('token', token)
            commit('AUTH_SUCCESS', token)
            resolve(res)
          })
          .catch(err => {
            commit('AUTH_ERROR')
            localStorage.removeItem('token')
            reject(err)
          })
      })
    }
  }
})

设置路由守卫

src/router/index.js中添加导航守卫控制访问权限:

如何基于vue实现登录

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login'
import Home from '@/components/Home'

Vue.use(Router)

const router = new Router({
  routes: [
    { path: '/login', component: Login },
    { path: '/', component: Home, meta: { requiresAuth: true } }
  ]
})

router.beforeEach((to, from, next) => {
  const token = localStorage.getItem('token')
  if (to.matched.some(record => record.meta.requiresAuth)) {
    token ? next() : next('/login')
  } else {
    next()
  }
})

export default router

处理API请求拦截

src/main.js中配置axios全局拦截器:

import axios from 'axios'

axios.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

样式优化

为登录页面添加基础样式(在Login.vue<style>部分):

.login {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
}
input {
  display: block;
  width: 100%;
  margin: 10px 0;
  padding: 8px;
}
button {
  background: #42b983;
  color: white;
  border: none;
  padding: 10px 15px;
  cursor: pointer;
}

服务端对接提示

需确保后端API接口满足以下规范:

  • 登录接口路径为/api/login
  • 接收{ username, password }格式的POST请求
  • 返回{ token: 'JWT_TOKEN' }格式的响应
  • 其他受保护接口需要验证Authorization: Bearer <token>请求头

扩展建议

  1. 添加表单验证功能(可使用Vuelidate等库)
  2. 实现记住密码功能(需注意安全存储)
  3. 增加第三方登录(如OAuth集成)
  4. 添加验证码或二次验证机制

标签: vue
分享给朋友:

相关文章

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <templ…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…

vue实现投票

vue实现投票

Vue实现投票功能 数据准备 在Vue组件的data中定义投票相关数据,包括选项列表和当前选中状态: data() { return { options: [ { id: 1…

原生实现vue功能

原生实现vue功能

原生JavaScript实现Vue核心功能 使用原生JavaScript模拟Vue的核心功能需要理解响应式数据绑定、虚拟DOM和组件系统等概念。以下是关键实现方法: 响应式数据系统 通过Object…