当前位置:首页 > VUE

使用vue实现登录

2026-03-29 05:16:13VUE

使用 Vue 实现登录功能

创建 Vue 项目

确保已安装 Vue CLI,通过以下命令创建项目:

vue create login-app

选择默认配置或手动配置(推荐包含 Vue Router 和 Vuex)。

设置路由

src/router/index.js 中配置登录页路由:

使用vue实现登录

import Vue from 'vue'
import Router from 'vue-router'
import Login from '../views/Login.vue'

Vue.use(Router)

export default new Router({
  routes: [
    { path: '/login', name: 'Login', component: Login }
  ]
})

创建登录组件

src/views/Login.vue 中编写登录表单:

<template>
  <div class="login">
    <h2>登录</h2>
    <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>
    <p v-if="error" class="error">{{ error }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      username: '',
      password: '',
      error: ''
    }
  },
  methods: {
    handleSubmit() {
      if (this.username && this.password) {
        // 调用登录 API
        this.$store.dispatch('login', {
          username: this.username,
          password: this.password
        }).then(() => {
          this.$router.push('/dashboard') // 跳转到主页
        }).catch(err => {
          this.error = err.message
        })
      }
    }
  }
}
</script>

配置 Vuex 状态管理

src/store/index.js 中定义登录逻辑:

使用vue实现登录

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') || '',
    user: null
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      localStorage.setItem('token', token)
    },
    setUser(state, user) {
      state.user = user
    }
  },
  actions: {
    async login({ commit }, { username, password }) {
      try {
        const res = await axios.post('/api/login', { username, password })
        commit('setToken', res.data.token)
        commit('setUser', res.data.user)
      } catch (err) {
        throw new Error('登录失败,请检查用户名或密码')
      }
    }
  }
})

配置 API 请求

src/main.js 中全局配置 Axios:

import axios from 'axios'
axios.defaults.baseURL = 'http://your-api-url.com'
Vue.prototype.$http = axios

添加路由守卫

src/router/index.js 中配置全局路由守卫,限制未登录访问:

router.beforeEach((to, from, next) => {
  const isAuthenticated = store.state.token
  if (to.name !== 'Login' && !isAuthenticated) {
    next({ name: 'Login' })
  } else {
    next()
  }
})

样式优化

src/views/Login.vue 中添加基础样式:

<style scoped>
.login {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
}
input {
  display: block;
  width: 100%;
  margin: 10px 0;
  padding: 8px;
}
.error {
  color: red;
}
</style>

关键点说明

  • 表单验证:通过 v-model 绑定数据,required 实现基础验证。
  • 状态持久化:使用 localStorage 存储 token,刷新后仍保持登录状态。
  • 路由守卫:确保未登录用户无法访问受保护路由。
  • 错误处理:通过 try/catch 捕获 API 错误并显示用户友好提示。

根据实际需求,可扩展验证逻辑(如密码强度)、添加第三方登录(OAuth)或集成验证码功能。

标签: vue
分享给朋友:

相关文章

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue实现定时

vue实现定时

Vue 实现定时功能的方法 使用 setInterval 和 clearInterval 在 Vue 中可以通过 setInterval 和 clearInterval 实现定时功能。在组件的 mou…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 canvas 动态生成水印 在 Vue 组件中通过 canvas 绘制水印,并将其作为背景图片插入到目标元素中。这种方法灵活性高,支持动态调整水印内容、角度和透明度。 &…

vue实现文字纠错

vue实现文字纠错

Vue实现文字纠错功能 实现文字纠错功能通常需要结合前端Vue框架和后端自然语言处理(NLP)服务。以下是几种常见的实现方法: 使用第三方API服务 注册并获取API密钥(如百度AI开放平台、腾讯云…

vue网页无法实现

vue网页无法实现

常见原因分析 网络连接问题 检查网络是否正常,确保能访问外部资源。如果是本地开发环境,确认代理配置是否正确,避免因网络问题导致资源加载失败。 依赖未正确安装 运行npm install或yarn i…