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

news2024/11/24 3:22:23

使用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"})
    });
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pillow学习3

Pillow库中&#xff0c;图像的模式代表了图像的颜色空间。以下是一些常见的图像模式及其含义&#xff1a; L&#xff08;灰度图&#xff09;&#xff1a;L模式表示图像是灰度图像&#xff0c;每个像素用8位表示&#xff08;范围为0-255&#xff09;&#xff0c;0表示黑色&#…

国家开放大学-实验3:类、对象、方法和修饰符的使用

作业答案 联系QQ:1603277115 实验目的 通过本实验&#xff0c;了解和掌握类、方法以及各个修饰符的使用。 问题描述 基于面向对象思想和类的方式&#xff0c;创建一个计算金额的程序。 啤酒 3.5元/罐&#xff0c; 方便面 4.5元/包&#xff0c; 矿泉水 2.0 元/瓶。 优惠规…

【Linux】信号之信号的产生详解

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误的话&#xff0c;还望指出&…

Java入门基础学习笔记50——ATM系统

1、项目演示&#xff1b; 2、项目技术实现&#xff1b; 1&#xff09;面向对象编程&#xff1a; 每个账户都是一个对象&#xff0c;所以要设计账户类Account&#xff0c;用于创建账户对象封装账户信息。ATM同样是一个对象&#xff0c;需要设计ATM类&#xff0c;代表ATM管理系…

打破壁垒,实现多引擎3D内容轻量化交付|点量云流

随着应用场景的不断拓展&#xff0c;传统的视频流技术已难以满足日益复杂的需求。当前市场上的视频流解决方案支持的引擎基本是UE、Unitiy输出的exe3D应用&#xff0c;在处理WebGL等3D内容时&#xff0c;也存在诸多局限性&#xff0c;例如性能限制、跨平台兼容性问题、无法直接…

玩转OpenHarmony PID:教你打造两轮平衡车

简介 此次为大家带来的是OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;系统与PID控制算法相结合并落地的平衡车项目。 PID控制算法是一种经典的&#xff0c;并被广泛应用在控制领域的算法。类似于这种&#xff1a;需要将某一个物理量保持稳定的场合&…

java学习五

Java方法 方法是什么 方法Debug 方法定义注意点 方法总结 方法使用时的常见问题

电商内卷时代,视频号小店凭借一己之力“脱颖而出”

大家好&#xff0c;我是电商笨笨熊 今年618各大电商平台花样百出&#xff1b; 某宝更是直接取消了“预售”&#xff0c;从5月就开始进入618预热期&#xff1b; 不少玩家既开心又难过&#xff0c;市场如此内卷&#xff0c;618确实是个爆发期&#xff0c;但更多的需要不断压低…

数据量较小的表是否有必要添加索引问题分析

目录 前言一、分析前准备1.1、准备测试表和数据1.2、插入测试数据1.3、测试环境说明 二、具体业务分析2.1、单次查询耗时分析2.2、无索引并发查询服务器CPU占用率分析2.3、添加索引并发查询服务器CPU占用率分析 三、总结 前言 在一次节日活动我们系统访问量到达了平时的两倍&am…

普乐蛙VR元宇宙展厅VR航天航空知识长廊

有没有幻想过有生之年可以亲自开战斗机&#xff1f;还是大名鼎鼎的“歼-20”哦&#xff01;上到四五十岁的中年人&#xff0c;下到十几岁的小年轻&#xff0c;无论男女老少&#xff0c;没人能逃得过炫酷到飞起的新一代战斗机&#xff01;快跟上小编的脚步&#xff0c;带你去开V…

2024云曦期中考(部分复现)

目录 一、Web Web_SINGIN 好玩的PHP 渗透的本质 简简单单的文件上传 简简单单的sql ​编辑 二、Crypto Crypto_Singin easy_rsa 三、Misc easy_singin Xjpg 四、Pwn pwn_Sing 五、Reverse babyre easy xor 一、Web Web_SINGIN F12代码中就有flag&#xff0…

构建稳健、高效与安全的企业级API网关

在现代企业信息化建设中&#xff0c;各种微服务架构系统以及不同类型的管理系统广泛兴起&#xff0c;平台中的数据安全逐渐成为企业重视的部分&#xff0c;在iPaaS系统中&#xff0c;一个名为“企业级API网关”的功能出现在大众眼中&#xff0c;随着企业信息化建设的不断深入&a…

ubuntu server 24.04 网络 SSH等基础配置

1 安装参考上一篇: VMware Workstation 虚拟机安装 ubuntu 24.04 server 详细教程 服务器安装图形化界面-CSDN博客 2 网络配置 #安装 sudo apt install net-tools#查看 ifconfig #修改网络配置 sudo vim /etc/netplan/50-cloud-init.yaml network:version: 2ethernets:en…

远程PLC、工控设备异地调试,贝锐蒲公英异地组网方案简单高效

北京宇东宁科技有限公司专门提供非标机电设备&#xff0c;能够用于金属制品的加工制造。设备主要采用西门子的PLC作为控制系统&#xff0c;同时能够连接上位机用于产量、温度、压力、电机运行数据的监控&#xff0c;以及工厂的大屏呈现需求。目前&#xff0c;客户主要是市场上的…

人工智能的阴暗面:犯罪分子如何利用 AI 进行欺诈

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成为推动各行各业生产力和创新的关键力量&#xff0c;而一些不法分子也开始探索如何将这些先进的工具用于他们自己的非法目的。从网络钓鱼到深度伪造&#xff0c;再到人肉搜索、越狱服务和身份验证系统的…

MySQL-性能分析

1、数据库服务器的优化步骤 2、查看系统性能参数 可以使用show status语句查询一些MySQL数据库服务器的性能参数 执行频率语法格式&#xff1a;show [ global | session ] status like 参数 &#xff1b;常用性能参数如下所示 参数名说明connection连接MySQL服务器的次数upti…

如何使用Unity XR Interaction Toolkit

使用环境&#xff1a; Unity2021.3.21f XR Interaction Toolkit v3.0.0 各类函数可用的&#xff1a; 简单项目配置&#xff1a; 第一步&#xff0c;导包&#xff08;samples可以不用导这么多&#xff0c;两个就够了&#xff09;&#xff1a; 第二步&#xff0c;构建场景&a…

c++|priority_queue

priority_queue 前置知识&#xff1a;仿函数priority_queue的模拟实现 前置知识&#xff1a;仿函数 template<class T> struct Less {bool operator()(const T& x, const T& y) // {return x < y;} };priority_queue的模拟实现 通过对priority_queue的底层…

element ui表格动态合并方法

懒得上代码直接截图了 1. 这种方法适合所有合并项全部在一起的 2.还方法可以选择从哪一列开始合并&#xff0c;或者像目录一样从前往后合并