前端如何写后台管理系统登录验证详细流程和代码

简介: 后台管理系统是公司必备的,从前些年由于技术人员的稀有,导致后台系统非常昂贵,近些年IT行业的快速发展,使得一些中小型公司开始自己写后台,自己维护,从而获取利益的最大化。

项目前景:后台管理系统是公司必备的,从前些年由于技术人员的稀有,导致后台系统非常昂贵,近些年IT行业的快速发展,使得一些中小型公司开始自己写后台,自己维护,从而获取利益的最大化。
今天是一个简单的后台登录操作

演示效果:

image.png

一、页面布局(Vue+Element Ui)

image.png

二、登录的流程

1、调用登录接口
2、登录成功:
3、保存token
4、跳转到首页,并给出成功的提示
5、失败:给出错误提示,让用户重新登录
具体代码:
新建文件夹对axios进行封装
封装请求

import axios from "axios";

const service = axios.create({
   
   
  baseURL: "url地址",
  timeout: 3000
});

//请求拦截器
service.interceptors.request.use(
  function (config) {
   
   
    //判断如果不是登录页,必须携带token到后端,才能正常返回数据

    //判断如果不是login页,获取token,并通过请求头携带到后端
    if (config.url !== 'login') {
   
   
      const token = localStorage.getItem('token');

      //设置请求头
      config.headers['Authorization'] = token;

    }
    return config;
  },
  function(error) {
   
   
    return Promise.reject(error);
  }
);

//响应拦截器
service.interceptors.response.use(
  function(response) {
   
   
    return response;
  },
  function(error) {
   
   
    return Promise.reject(error);
  }
);

export default service;

请求接口api

import request from "./index";


export function login(data) {
   
   
  // console.log('data::',data)
  return request({
   
   
    url: "login",
    method: "POST",
    data
  });
}

在main.js中进行全局路由拦截

//全局路由拦截
router.beforeEach((to, from, next) => {
   
   
  console.log("from:", from);
  console.log("to:", to);
  if (to.meta.auth) {
   
   
    const token = localStorage.getItem('token')
    if (!token) {
   
   
      next({
   
   
        name: 'login',
        query: {
   
    redirect:to.fullPath  }
        })
    } else {
   
   
      next()
     }
  } else {
   
   
    next();
  }

})

登录页面代码

<template>
  <div class="login_wrap">
    <el-form
      class="login_form"
      label-position="right"
      label-width="80px"
      :model="userinfo"
      :rules="loginRules"
    >
      <h1>用户登录</h1>
      <el-form-item label="用户名" prop="username">
        <el-input v-model="userinfo.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" prop="password">
        <el-input v-model="userinfo.password" type="password"></el-input>
      </el-form-item>
      <el-button type="primary" class="login_btn" @click.prevent="handleLogin"
        >登录</el-button
      >
    </el-form>
  </div>
</template>

<script>
//引入登录接口
import {
   
    login } from "@/http/api";
export default {
   
   
  name: "login",
  data() {
   
   
    return {
   
   
      userinfo: {
   
   
        username: "",
        password: ""
      },
      loginRules: {
   
   
        username: [
          {
   
    required: true, message: "请输入用户名", trigger: "blur" },
          {
   
    min: 5, max: 20, message: "长度在 5 到 20个字符", trigger: "blur" }
        ],
        password: [
          {
   
    required: true, message: "请输入密码", trigger: "blur" },
          {
   
    min: 5, max: 60, message: "长度在 5 到 20 个字符", trigger: "blur" }
        ]
      }
    };
  },
  methods: {
   
   
    async handleLogin() {
   
   
      /**
       * 调用登录接口
       * 成功:
       *     保存token
       *     跳转到首页,并给出成功的提示
       * 失败:给出错误提示,让用户重新登录
       */
      const res = await login(this.userinfo);
      const {
   
   
        meta: {
   
    msg, status }
      } = res.data;

      if (status === 200) {
   
   
        const {
   
    token } = res.data.data;
        localStorage.setItem("token", token);
        //记住上次没有token要访问的页面地址,如果登录成功,再返回到上次要访问到页面
        const {
   
    redirect } = this.$route.query;

        //如果直接登录,没有redirect,成功后直接跳转到home
        if (!redirect) {
   
   
          this.$router.push({
   
    name: "Home" });
        } else {
   
   
          this.$router.push({
   
    path: redirect });
        }

        this.$message({
   
   
          message: msg,
          type: "success"
        });
      } else {
   
   
        this.$message({
   
   
          message: msg,
          type: "error"
        });
      }
    }
  }
};
</script>

<style lang="scss" scoped>
.login_wrap {
   
   
  width: 100%;
  height: 100%;
  background: #072765;
}

.login_form {
   
   
  width: 40%;
  height: 260px;
  padding: 30px;
  background: #fff;
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  margin: auto;

  h1 {
   
   
    text-align: center;
    margin: 10px 0;
  }
}

.login_btn {
   
   
  width: 100%;
}
</style>

总结:以上是一个后台管理系统实现登录的流程思路,具体请结合API进行实现

目录
相关文章
|
6天前
|
前端开发 JavaScript
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
这篇文章介绍了使用AJAX技术将前端页面中表单接收的多个参数快速便捷地传输到后端servlet的方法,并通过示例代码展示了前端JavaScript中的AJAX调用和后端servlet的接收处理。
这篇文章介绍了如何使用form表单结合Bootstrap格式将前端数据通过action属性提交到后端的servlet,包括前端表单的创建、数据的一级和二级验证,以及后端servlet的注解和参数获取。
|
1天前
|
前端开发 IDE Java
"揭秘前端转Java的秘径:SpringBoot Web极速入门,掌握分层解耦艺术,让你的后端代码飞起来,你敢来挑战吗?"
【8月更文挑战第19天】面向前端开发者介绍Spring Boot后端开发,通过简化Spring应用搭建,快速实现Web应用。本文以创建“Hello World”应用为例,展示项目基本结构与运行方式。进而深入探讨三层架构(Controller、Service、DAO)下的分层解耦概念,通过员工信息管理示例,演示各层如何协作及依赖注入的使用,以此提升代码灵活性与可维护性。
|
10天前
|
开发框架 前端开发 JavaScript
【Vue 3】一款开箱即用的中后台前端开发框架,开源且免费!!
【Vue 3】一款开箱即用的中后台前端开发框架,开源且免费!!
|
12天前
|
缓存 前端开发 应用服务中间件
看看高手是怎么部署前端代码的
【8月更文挑战第8天】从简单的前端项目部署开始,构建dist文件夹并通过Nginx代理接口请求,以解决跨域问题。为进一步优化大型系统的性能及稳定性,需采用高级部署策略。例如,利用CDN分发静态资源并采用缓存控制减少带宽消耗,通过文件哈希值更新URL确保资源按需刷新。面对大规模部署挑战,采用非覆盖式发布方法避免样式错乱风险,并通过灰度部署逐步验证新版功能,确保服务平稳过渡。借助Nginx实现流量切分,可灵活调整新旧版本流量比例,有效降低上线风险。
24 3
|
11天前
|
JavaScript 前端开发 开发者
【颠覆你的前端世界!】VSCode + ESLint + Prettier:一键拯救Vue代码于水深火热之中,打造极致编程体验之旅!
【8月更文挑战第9天】随着前端技术的发展,保持代码规范一致至关重要。本文介绍如何在VSCode中利用ESLint和Prettier检查并格式化Vue.js代码。ESLint检测代码错误,Prettier保证风格统一。首先需安装VSCode插件及Node.js包,然后配置ESLint和Prettier选项。在VSCode设置中启用保存时自动修复与格式化功能。配置完成后,VSCode将自动应用规则,提升编码效率和代码质量。
52 1
|
5天前
|
前端开发
前端代码书写规范
【8月更文挑战第15天】前端代码书写规范
10 0
|
5天前
|
JSON 前端开发 Java
前端如何提交数据给后端(包含前端和后端代码)
前端如何提交数据给后端(包含前端和后端代码)
|
7天前
|
监控 前端开发 数据挖掘
微店商品详情数据接口:接入淘宝代购系统的连接桥梁,展示前端页面
微店API让开发者获取商品详尽信息,如名称、价格等。作为淘宝代购系统的桥梁,它支持数据同步、商品及订单管理。通过多平台API,实现实时商品数据抓取,提供一致购物流程。此外,还能进行价格比较、库存监控,提升用户交互体验,并辅助数据分析以优化采购策略。开发者需按规范对接API,并参考官方文档获取最新信息。
|
10天前
|
缓存 JavaScript 前端开发
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
|
7天前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
11 0