0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vue实现登录功能

jf_96884364 来源:jf_96884364 作者:jf_96884364 2023-01-13 10:43 次阅读

代码地址:https://github.com/Snowstorm0/vue-login-mock

创建项目

打开cmd,输入ui命令:

vue ui

若没有反应,可能是版本太低,需要卸载后重装:

npm uninstall vue-cli -g   #卸载
npm install @vue/cli -g    #安装

执行ui命令成功后,会出现提示:

Starting GUI... Ready on http://localhost:8000

并会自动打开页面:

创建名为SpringAndVue-vue的项目,预设选择“手动”;功能开启 Babel、Router、Vuex、Linter/Formatter;配置选择“ESLint with error prevention only”;版本建议使用 “vue2.0”。创建新项目。

通过cd进入目录,启动项目:

npm run serve

2 安装插件

2.1 element-ui

打开cmd,输入ui命令:

vue ui

在插件项搜索,并点击安装。

vue2.0 选择安装 “vue-cli-plugin-element”;vue3.0 选择安装 “vue-cli-plugin-element-plus”。

2.2 axios

Terminal安装axios,每个新项目都需要安装:

# vue-cli2.0命令
npm install axios
# vue-cli3.0命令
npm add axios

2.3 mockjs

Terminal安装mockjs

npm install mockjs

3 添加功能

3.1 login

创建 login.vue页面:

<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:{
                    name: [
                        { required: true, message: '请输入用户名', trigger: 'blur' },
                        { min: 2, max: 5, message: '用户名长度在 2 到 5 个字符', trigger: 'blur' }
                    ],
                    password: [
                        { required: true, message: '请输密码', trigger: 'blur' },
                        { min: 2, max: 5, message: '密码长度在 2 到 5 个字符', trigger: 'blur' }
                    ]
                }

            }
        },
        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('/home');
                            }else{
                                alert('用户名或密码错误!');
                                return false;
                            }
                        });
                    } else {
                        console.log('校验失败');
                        return false;
                    }
                });
            }
        }
    }
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>

3.2 配置路由

在router.js中配置一级路由:

{
    path: '/login',
    name: '登录',
    component: () =>import(/* webpackChunkName: "user" */'../views/login.vue')
   }

3.3 mockjs 模拟后台

在没有后端代码的情况下,可以使用 mockjs 模拟后台数据。

我们使用 mockjs 模拟后台登录验证,并返回token。

我们设置登录的用户名和密码都是admin

在 src 下新建 mock 文件夹,在 mock 文件夹中新建 mock.js ,内容如下:

//引入 npm 安装的 mockjs
const Mock = require('mockjs')   
// 获取 mock.Random 对象
const Random = Mock.Random;
// 登录,此地址与login登录地址对应
Mock.mock('/login','post', (param)=>{  
    let state=0;
    let body = JSON.parse(param.body);
    console.log(body)
    let data;
    //模拟用户名和密码都是 admin
    if(body.name=='admin'&&body.password=='admin'){
        state=1;
        data = Mock.mock({
            "token": "@guid()",//模拟token
            "name": "@cname",//随机生成中文名字
        });
    }
    return{
        "state":state,
        "vData":data
    }
});

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

3.4 storejs

在 src/store/index.js 中添加 Vuex.Store 的属性:

exportdefaultnew Vuex.Store({
  state: {
    token: '',
    username: '代码的路'
  },
  getters: {
  },
  mutations: {
    SET_TOKEN(state, token){
      state.token = token ;
      localStorage.setItem("token",token);
    },
    resetState(state){
      state.token = '';
      localStorage.clear();
  }
  },
  actions: {
  },
  modules: {
  }
})

4 功能实现

在浏览器输入地址:http://localhost:8080/#/login

可以出现登录界面:

输入用户名和密码 admin,即可进入主页:

点击头像出现退出按钮,可以回到登录界面:

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • GitHub
    +关注

    关注

    3

    文章

    457

    浏览量

    15924
  • vue
    vue
    +关注

    关注

    0

    文章

    56

    浏览量

    7676
收藏 人收藏

    评论

    相关推荐

    几种实现vue的数据双向绑定的方法介绍

    vue的数据双向绑定的实现
    发表于 07-29 08:33

    vue-router的概念和用法

    vue:前端路由和vue-router
    发表于 03-06 13:28

    基于TypeScript实现Vue3.0指令组件拖拽

    最近在用vue3重构后台的一个功能。一个弹窗组件,弹出一个表单。然后点击提交。早上运维突然跑过来问我,为啥弹窗挡住了下边的表格的数据,我添加的时候,都没法对照表格来看了。你必须给我解决一下。我参考了
    发表于 11-04 06:58

    vue-cli-----vue实例中template:'<App/>是什么意思?

    哪位大神知道vue-cli-----vue实例中template:'是什么意思吗?
    发表于 11-05 07:02

    如何去实现Vue.js身份证读卡器阅读呢

    如何去实现Vue.js身份证读卡器阅读呢?
    发表于 10-19 07:57

    vue嵌入浏览器的相关资料推荐

    vue嵌入浏览器 Vue-ico (vue-ico)Dead easy, Google Material Icons for Vue. 太简单了,V
    发表于 12-21 08:20

    请问鸿蒙里面怎样实现类似vue中v-html这一功能呢?

    请问鸿蒙里面怎样实现类似vue中v-html这一功能呢,我试了下不支持模板字符串,有的功能需要文本高亮,这时候需要对返回数据进行解析成带标签的字符串,
    发表于 05-30 11:46

    单点登录实现方式有哪些

    前言 实现方式一:父域 Cookie 实现方式二:认证中心 实现方式三:LocalStorage 跨域 补充:域名分级 前言 在 B/S 系统中,登录
    的头像 发表于 02-02 14:00 1978次阅读
    单点<b class='flag-5'>登录</b>的<b class='flag-5'>实现</b>方式有哪些

    关于React和Vue产生一定的认知

    Vue2 相较 Vue3 版本而言牢牢占据着大部分 Vue 开发者的视野,但是因为 Vue 官方已经把 Vue3 作为默认的版本,所以在此同
    的头像 发表于 11-02 13:18 543次阅读

    SpringBoot+ElasticSearch实现模糊查询功能

    基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等
    的头像 发表于 12-30 14:00 604次阅读

    Vue入门Vue的生命周期

    .生命周期 4.1生命周期是什么 Vue的生命周期, 就是Vue实例从创建到销毁的过程.
    的头像 发表于 02-06 16:16 660次阅读
    <b class='flag-5'>Vue</b>入门<b class='flag-5'>Vue</b>的生命周期

    Vue入门之Vue定义

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 Vue 的核心库只关注视图层,也就是只处理页面。 Vue提供的一套JS框架,通常称为
    的头像 发表于 02-06 16:41 826次阅读
    <b class='flag-5'>Vue</b>入门之<b class='flag-5'>Vue</b>定义

    SpringBoot+Vue实现网页版人脸登录、人脸识别案例解析

    Springboot,Mysql,JWT,VUE 2.X 等等技术实现,主要功能点:人脸列表CRUD,日志列表CRUD,基于自建人脸库通过base64编码方式存储人脸图片,通过调用腾讯云人脸对比API场景
    发表于 02-23 15:36 802次阅读

    在iOS中集成Vue是什么

    上一节Vue在非浏览器环境下的尝试我们利用了weex在vue中的dom实现成功的在非浏览器环境中Vue的实例,接下来我们将Vue集成到iOS
    的头像 发表于 03-03 09:56 377次阅读
    在iOS中集成<b class='flag-5'>Vue</b>是什么

    SpringBoot+Vue实现网页版人脸登录、人脸识别

    技术点:Springboot,Mysql,JWT,VUE 2.X 等等技术实现,主要功能点:人脸列表CRUD,日志列表CRUD,基于自建人脸库通过base64编码方式存储人脸图片,通过调用腾讯云人脸对比API场景
    的头像 发表于 03-07 09:27 739次阅读