当前位置:首页 > 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文件,包含表单结构:

<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中添加导航守卫控制访问权限:

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接口满足以下规范:

如何基于vue实现登录

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

扩展建议

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

标签: vue
分享给朋友:

相关文章

vue实现长按

vue实现长按

Vue 实现长按功能的方法 在 Vue 中实现长按功能可以通过原生事件监听或自定义指令完成。以下是几种常见实现方式: 使用原生事件监听 通过 @mousedown 和 @mouseup 或 @tou…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue搜索实现

vue搜索实现

Vue 搜索功能实现方法 基于计算属性的搜索 在 Vue 中可以通过计算属性实现简单的搜索功能。这种方式适合小型数据集,利用 JavaScript 的 filter 方法进行筛选。 data() {…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…