Vue开发实例(十三)用户登录功能

使用Vue实现登录具有以下几个好处:

  1. 响应式界面:Vue框架的响应式特性可以帮助开发者轻松地实现用户登录界面的交互效果,包括表单验证、实时错误提示等,从而提升用户体验。
  2. 组件化开发:Vue框架支持组件化开发,可以将登录页面拆分成多个组件,使得代码结构清晰,易于维护和扩展。
  3. 路由管理:Vue框架内置了Vue Router,能够方便地管理前端路由,包括登录后的页面跳转、权限控制等,使得整个登录流程更加清晰和灵活。
  4. 状态管理:借助Vuex状态管理工具,可以统一管理用户的登录状态、用户信息等数据,方便在不同组件中进行状态共享和更新。
  5. 第三方库支持:Vue框架有着丰富的第三方插件和库支持,可以轻松集成各种登录认证方式、社交登录等功能,丰富了登录方式选择。

总的来说,使用Vue实现登录可以借助其响应式界面、组件化开发、路由管理、状态管理和第三方库支持等优势,为用户提供良好的登录体验,并且使得开发工作更加高效和灵活。

本文旨在实现简单的登录逻辑

文章目录

  • 前端页面实现
  • 加入后台验证
  • 退出实现

前端页面实现

  1. 创建 login.vue页面
    其中,点击确定后,会直接跳转到主页(确定按钮对应的方法,直接跳转到 “/index”路由)
confirm(){
	this.$router.replace(‘/index’);
}

参考代码:

<template>
    <div class="loginbBody">
        <div class="loginDiv">
            <div class="login-content">
                <h1 class="login-title">用户登录</h1>
                <el-form :model="loginForm" label-width="100px"
                         :rules="rules" ref="loginForm">
                    <el-form-item label="名字" prop="name">
                        <el-input style="width: 200px" type="text" v-model="loginForm.name"
                                  autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item label="密码" prop="password">
                        <el-input style="width: 200px" type="password" v-model="loginForm.password"
                                  show-password autocomplete="off" size="small"></el-input>
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="confirm">确 定</el-button>
                    </el-form-item>
                </el-form>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: "login",
        data(){
            return{
                loginForm:{
                    name:'',
                    password:''
                },
                rules:{
                  
                }
            }
        },
        methods:{
            confirm(){
                this.$router.replace('/index');
            }
        }
    }
</script>

<style scoped >
    .loginbBody {
        width: 100%;
        height: 100%;
        background-color: #B3C0D1;
    }
    .loginDiv {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -200px;
        margin-left: -250px;
        width: 450px;
        height: 330px;
        background: #fff;
        border-radius: 5%;

    }
    .login-title {
        margin: 20px 0;
        text-align: center;
    }
    .login-content {
        width: 400px;
        height: 250px;
        position: absolute;
        top: 25px;
        left: 25px;
    }
</style>

  1. 在router.js中配置一级路由
    在这里插入图片描述

  2. 登录页面效果如下:
    在这里插入图片描述

  3. 加入页面验证

刚才直接点击的确定,没有做任何的判断,实际项目上肯定要做不少的判断的;
这里就加是否为空、长度这两个规则来作为验证;

在data里面加入规则的内容

rules:{
   name: [
       { required: true, message: '请输入用户名', trigger: 'blur' },
       { min: 3, max: 6, message: '用户名长度在 3 到 6 个字符', trigger: 'blur' }
   ],
   password: [
       { required: true, message: '请输密码', trigger: 'blur' },
       { min: 3, max: 6, message: '密码长度在 3 到 6 个字符', trigger: 'blur' }
   ]
}
  1. el-form里面的规则配置有没有到位

el-form加入 :rules=“rules” ref=“loginForm”
el-form-item 加入的prop,写入对应的值

在这里插入图片描述

  1. 修改confirm方法的代码,加入验证逻辑

this.$refs.loginForm.validate 执行验证,this.$refs.loginForm 获取当前的表单对象
valid成功为true则直接跳转到index,失败则提示红色的内容

methods: {
        confirm() {
            this.$refs.loginForm.validate((valid) => {
                if (valid) { //valid成功为true,失败为false
                    this.$router.replace('/index');
                } else {
                    console.log('校验失败');
                    return false;
                }
            });
        }
    }

加入后台验证

  • 用mockjs模拟后台登录验证,并返回token
Mock.mock('/login','post', (param)=>{
    let state=0;
    let body = JSON.parse(param.body);
    console.log(body)
    let data;
    //模拟成功数据
    if(body.name=='admin'&&body.password=='123'){
        state=1;
        data = Mock.mock({
            "token": "@guid()",//模拟token
            "name": "@cname",//随机生成中文名字随机生成中文名字
        });
    }

    return{
        "state":state,
        "vData":data
    }
});

  • 在storejs里面将token存储

state 添加token属性,位置:store/store.js

在这里插入图片描述

  • mutations 增加 SET_TOKEN 方法,将token存储到state和localStorage 中
    在这里插入图片描述
  • login.vue的确定方法confirm做修改
    提交登录信息到后台,验证成功后则登录并存储token信息,验证不成功提示失败
methods: {
        confirm() {
            this.$refs.loginForm.validate((valid) => {
                if (valid) { //valid成功为true,失败为false
                    //去后台验证用户名密码,并返回token
                    this.$axios.post('/login', this.loginForm).then(res => {
                        console.log(res.data)
                        if (res.data.state == 1) {
                            //存储token到本地
                            this.$store.commit("SET_TOKEN", res.data.vData.token);
                            //跳转到主页
                            this.$router.replace('/index');
                        } else {
                            alert('校验失败,用户名或密码错误!');
                            return false;
                        }
                    });
                } else {
                    console.log('校验失败');
                    return false;
                }
            });
        }
    }

退出实现

  • mockjs模拟退出
//退出
Mock.mock('/logout','post', ()=>{
    return {state:1}
});

  • store.js的mutations中添加 resetState 用于重置相关数据
resetState(state){
    state.token = '';
    localStorage.clear();
}

  • 在Header页面的退出加入点击事件
    el-dropdown-item编写click方法的时候要加入 native ,否则会点击没反应
    在这里插入图片描述
  • 在Header页面增加点击方法

成功调用后台后

  1. 清空相关数据
  2. 跳转到登录页面
logout(){
    this.$axios.post('/logout',this.loginForm).then(res=>{
        console.log(res)
        //清理数据
        this.$store.commit('resetState');
        //跳转到登录路由
        this.$router.push({path:"/login"})
    });
}

🆗,到此为止,登录页面的实现完成,如果需要添加自己的逻辑,那就自己继续完善~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/636225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4月手机行业线上市场销售数据分析

政府对智能手机行业的支持政策&#xff0c;如5G推广&#xff0c;以及相关的产业政策&#xff0c;都在一定程度上推动了智能手机市场的发展&#xff0c;再加上AI应用的推广和全球科技迅猛发展&#xff0c;中国手机市场在2024年迎来了恢复性增长。 据鲸参谋数据统计&#xff0c;…

vue+canvas实现逐字手写效果

在pc端进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 <template><div class"container"…

MS1112芯片ADC采样测试

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

VUE3-form表单保存附件与基本信息

element-ui代码 <el-dialog :title"上传附件" v-model"dialogAdds.visible" width"500px" append-to-body> <el-form-item label"唯一标识"> <dict-tag v-if"form.groupId" :options"unique_identifica…

生成模型 | 从 VAE 到 Diffusion Model (上)

文章目录 一&#xff0c;GAN(对抗式生成网络&#xff09;二&#xff0c;Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)三&#xff0c;VAE四&#xff0c;VQ-VAE (Vector Quantized Variational Autoencoder)VQ-VAE 2小总结&#xff1a; 五&#xff0c;DALL-E &#xff08;O…

翻译《The Old New Thing》- How do I mark a shortcut file as requiring elevation?

How do I mark a shortcut file as requiring elevation? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071219-00/?p24103 Raymond Chen 2007年12月19日 如何将快捷方式标记为需要提升权限 简要 文章介绍了如何通过设置SLDF_RUNAS_US…

Window Linux 权限提升

#基础点&#xff1a; 0、为什么我们要学习权限提升转移技术&#xff1a; 简单来说就是达到目的过程中需要用到它 心里要想着我是谁 我在哪 我要去哪里 1、具体有哪些权限需要我们了解掌握的&#xff1a; 后台权限&#xff0c;数据库权限&#xff0c;Web权限&#xff0c;用户权…

基于Netty实现WebSocket服务端

本文基于Netty实现WebSocket服务端&#xff0c;实现和客户端的交互通信&#xff0c;客户端基于JavaScript实现。 在【WebSocket简介-CSDN博客】中&#xff0c;我们知道WebSocket是基于Http协议的升级&#xff0c;而Netty提供了Http和WebSocket Frame的编解码器和Handler&#…

Access to image at ‘xxx‘ from origin ‘xxx‘ has been blocked by CORS policy解决方案

如图所示&#xff0c;控制台出现下面的报错&#xff1a; 但是正常加载了图片 这个错误表明你尝试从某个源&#xff08;origin&#xff09;加载阿里云上的图片时&#xff0c;浏览器因为CORS&#xff08;跨源资源共享&#xff09;策略阻止了这次请求。尽管图片能正常显示&#x…

Midjourney应用场景、特点、生成图片带来影响

Midjourney是一个基于GPT-3.5系列接口开发的免费AI机器人&#xff0c;旨在提供多领域的智能对话服务。本文主要介绍Midjourney的应用场景、功能特点、图片生成后可以做什么&#xff1f; 一、Midjourney应用场景 Midjourney的应用场景相当广泛&#xff0c;以下是一些主要的适用…

迈威通信TSN工业自动化系统解决方案助力智能制造实现确定性服务

工业4.0时代&#xff0c;IT与OT的融合已成为制造企业数字化转型的关键。然而&#xff0c;传统OT网络与IT网络的差异给融合带来了重重挑战。例如&#xff0c;当传送带通过PROFINET协议与HMI通讯时&#xff0c;兼容性问题凸显;硬件实时运动控制采用EtherCAT协议&#xff0c;机械臂…

基于GIS的各类地图样式作品的欣赏,真的不一般。

GIS&#xff08;地理信息系统&#xff09;提供了丰富的地图数据&#xff0c;为地图可视化开发提供了基础数据。在GIS的基础上&#xff0c;您可以根据需求和目的&#xff0c;采用不同的可视化样式来展示地图数据。 以下是一些常见的地图可视化样式&#xff1a; 点状标记&#x…

Nat Hum Behav | 人类前额叶皮层非空间注意力的因果相位依赖性控制

摘要 非空间注意力是一种基本的认知机制&#xff0c;它使个体能够将意识的焦点从无关刺激转向与行为目标相关的感觉信息上。有人提出了一种关于注意力是由前额叶皮层中缓慢兴奋性波动的持续相位所调节的假设&#xff0c;但这一假设存在争议且尚未达成共识。在这里&#xff0c;…

angr使用学习

首先我是直接在kali中安装的&#xff0c;也是边练边学的。 嗯&#xff0c;要在纯净python环境&#xff0c;所以是在 virtualenv 虚拟环境里&#xff0c;也不是特别会用这个&#xff0c;按照教程一步步做的 source venv/bin/activate 进入了对应环境 退出是 deactivate en,ipy…

精准控制,无缝集成:EC-Master与LxWin的EtherCAT主站解决方案

在今天&#xff0c;越来越多的制造业客户选择自动化智能化转型&#xff0c;自动化智能化促进了人机交互、数据互通与自动化控制的发展。随着工业4.0和智能制造的推进&#xff0c;对高速、低时延、高性能的需求在自动化控制领域日益增长。 在这一背景下&#xff0c;EtherCAT&am…

C++相关概念和易错语法(14)(初始化注意事项、vector、编译器向上查找规则)

1.当我们在代码中想要终止运行的话&#xff0c;我们可以采用Ctrl C或Ctrl Z&#xff0c;其中^C代表杀进程&#xff0c;^Z设置结束2.编码表&#xff1a;我们目前比较熟悉的是ASCII码编码方式&#xff0c;但是我们发现平时使用的汉字无法通过ASCII编码&#xff0c;除此之外&…

1个逗号,提升Python代码质量

有些时候&#xff0c;我们会在Python代码中看到列表或其他科迭代对象的结尾会存在一个逗号&#xff1a; 而且编辑器和解释器都容许这种逗号的存在&#xff0c;它就叫作拖尾逗号。 通常是为了在频繁地增减数组元素的时候同时保证语法的正确&#xff0c;且拖尾逗号不占用数组的长…

气膜建筑:寿命、优势与应用—轻空间

近年来&#xff0c;气膜建筑因其独特的结构和众多优势&#xff0c;逐渐成为建筑领域的热门选择。气膜建筑使用寿命长&#xff0c;且在建造速度、成本、安全性、节能环保和舒适性等方面具有显著优势。轻空间将详细探讨气膜建筑的使用寿命、主要优势及其在不同领域的广泛应用。 气…

【从C++到Java一周速成】章节10:封装、继承、方法的重写、多态

章节10&#xff1a;封装、继承、方法的重写、多态 【1】封装1.高内聚&#xff0c;低耦合2.代码层面的体现 【2】继承【3】方法的重写【4】多态 【1】封装 1.高内聚&#xff0c;低耦合 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b;…

JSX语法看这一篇就够了-02

JSX and React 是相互独立的两种开发语言&#xff0c;它们经常一起使用&#xff0c;但也可以单独使用它们中的任意一个&#xff0c;JSX 是JavaScript 语言的扩展&#xff0c;而 React 则是一个 JavaScript 的库。 概述简介 JSX简介 JSX全称 javascriptXML&#xff0c;是Faceb…