首页 > 其他分享 >如何实现基于vue技术的管理系统的用户是否登录

如何实现基于vue技术的管理系统的用户是否登录

时间:2024-02-18 15:56:11浏览次数:35  
标签:vue 服务器端 登录 管理系统 用户 Token Cookie

问题:在进行前后端分离开发时候,我们会处理一些前端用户的登录状态。如果用户没有进行登录,则不允许用户访问某些页面

一、登录方式

首先可以先了解一下前后端分离后的登录方式

(1)Cookie+Session

(2)Token

二、Cookie+Session

HTTP 是一种无状态的协议,客户端每次发送请求时,首先要和服务器端建立一个连接,在请求完成后又会断开这个连接。这种方式可以节省传输时占用的连接资源,但同时也存在一个问题:每次请求都是独立的,服务器端无法判断本次请求和上一次请求是否来自同一个用户,进而也就无法判断用户的登录状态。

为了解决 HTTP 无状态的问题,Lou Montulli 在 1994 年的时候,推出了 Cookie。

  • 用户访问 a.com/pageA,并输入密码登录。
  • 服务器验证密码无误后,会创建 SessionId,并将它保存起来。
  • 服务器端响应这个 HTTP 请求,并通过 Set-Cookie 头信息,将 SessionId 写入 Cookie 中。

第一次登录完成之后,后续的访问就可以直接使用 Cookie 进行身份验证了

Cookie+Session存在的问题

  • 由于服务器端需要对接大量的客户端,也就需要存放大量的 SessionId,这样会导致服务器压力过大。
  • 如果服务器端是一个集群,为了同步登录态,需要将 SessionId 同步到每一台机器上,无形中增加了服务器端维护成本。
  • 由于 SessionId 存放在 Cookie 中,所以无法避免 CSRF 攻击。

三、Token

Token 是服务端生成的一串字符串,以作为客户端请求的一个令牌。当第一次登录后,服务器会生成一个 Token 并返回给客户端,客户端后续访问时,只需带上这个 Token 即可完成身份认证

  • 用户输入账号密码,并点击登录。
  • 服务器端验证账号密码无误,创建 Token。
  • 服务器端将 Token 返回给客户端,由客户端自由保存。

  • 用户访问 a.com/pageB 时,带上第一次登录时获取的 Token。
  • 服务器端验证 Token ,有效则身份验证成功。

Token的优缺点

  • 服务器端不需要存放 Token,所以不会对服务器端造成压力,即使是服务器集群,也不需要增加维护成本。
  • Token 可以存放在前端任何地方,可以不用保存在 Cookie 中,提升了页面的安全性。
  • Token 下发之后,只要在生效时间之内,就一直有效,如果服务器端想收回此 Token 的权限,并不容易。

四、前端技术实现思路

在Vue中可以通过使用路由守卫来判断用户是否已经登录。

首先,需要创建一个全局的路由守卫函数,该函数会在每次导航之前被调用。我们可以在这个函数里面进行验证用户是否已经登录的操作

// main.js文件
import Vue from 'vue'
import App from './App.vue'
import router from './router' // 引入自定义的路由配置
 
const isLoggedIn = () => {
  // 根据业务逻辑判断用户是否已经登录
  return true; // 返回true表示已登录,false则未登录
}
 
router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isLoggedIn()) {
    // 若目标页面设置了 requiresAuth 属性且当前用户未登录,则重定向到登录页面
    next('/login')
  } else {
    next()
  }
})
 
new Vue({
  render: h => h(App),
}).$mount('#app')

然后,在路由配置文件(router/index.js)中为需要限制登录才能访问的组件添加 requiresAuth 元字段。

// router/index.js文件
import Vue from 'vue'
import Router from 'vue-router'
import HomePage from '@/views/HomePage.vue'
import LoginPage from '@/views/LoginPage.vue'
 
Vue.use(Router)
 
export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: HomePage,
      meta: { requiresAuth: true }, // 设置 requiresAuth 属性
    },
    {
      path: '/login',
      name: 'login',
      component: LoginPage,
    },
  ],
})

最后,在模板中就可以直接使用 <router-view> 来显示对应的页面内容了。

<!-- App.vue -->
<template>
  <div id="app">
    <router-view></router-view> <!-- 此处将展示不同的页面内容 -->
  </div>
</template>

这样,当用户没有登录时,他们将无法访问 / 或其他需要登录才能访问的页面,而会被重定向到登录页面。

配置代理转发(vue.config.js),解决跨域问题

module.exports = {
  devServer: {
    // 代理配置
    proxy: {
        '/api': {
          target: 'http://localhost:3000' // 我们要代理的真实接口地址
        }
      }
    }
  }

 

标签:vue,服务器端,登录,管理系统,用户,Token,Cookie
From: https://www.cnblogs.com/liuyangjava/p/18019417

相关文章

  • Vue3实现加入购物车抛物线效果组件
    前言在前几天的一次迭代中,我遇到了这么一个需求,模仿支付宝首页应用中心的编辑功能,支持编辑首页展示的应用,在支付宝应用首页编辑功能中,我注意到一种独特而细致的设计。无论是增加还是移除某个应用,都会引发一个精美的移动动画效果。这种贴心的设计在用户体验中起到了微妙而关键的作......
  • 解决vue2中el-table表格组件的空状态过小的问题
    问题当我们使用element的表格组件的时候,空状态会变的非常瘪,就会造成页面非常难看这样很不美观解决办法可以使用插槽设置空状态,并通过css来调整空状态的样式新建一个空表格<template><div><el-table:data="tableData"stripestyle="width:100%">......
  • 25个常见的python系统设计源码(python+mysql+vue)
    收集整理了25个常见的python系统设计源码。可以用于课程作业或者毕业设计。所有系统都带源码和文档。1.网上商城系统这是一个基于python+vue开发的商城网站,平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。......
  • 基于python+django+mysql的小区物业管理系统
    该系统是基于python+django开发的小区物业管理系统。适用场景:大学生、课程作业、毕业设计。学习过程中,如遇问题可以在github给作者留言。主要功能有:业主管理、报修管理、停车管理、资产管理、小区管理、用户管理、日志管理、系统信息。演示地址http://wuye.gitapp.cn/admin后......
  • 100 行代码实现用户登录注册与 RESTful 接口 - 手把手教程附 Python 源码
    在开发大多数应用时,用户系统都是必不可少的部分,而我们总是需要开发围绕用户的登录,注册,获取,更新等接口。在这篇文章将带你用一百多行代码简洁地实现一套这样的用户鉴权与RESTful接口,并使用Session来处理用户的登录登出我们将使用UtilMeta框架完成接口开发,这是一个开源的Py......
  • Vue.js前端框架之vite+vue+naive前端项目模板
    1.搭建Vue示例项目npmcreatevue cdvue-demo:进入项目目录npminstall:安装所有依赖npmrundev:启动项目2.了解Vue开发和工作原理2.1package.json类似于Python项目中pyproject.toml,包含了项目名称、版本、命令、依赖、设定2.2index.html浏览器访问到的HTML文件 ......
  • 【Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建数据驱动......
  • vue基础知识和原理(二)
    1.13列表渲染v-for指令用于展示列表数据语法:v-for="(item,index)inxxx":key="yyy"可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)<divid="root"><!--v-for指令:1.用于展示列表数据......
  • [Vue] CSS中的v-bind
    在Vue中说到v-bind大多数时候都是想到template中动态绑定script中的响应式数据。但其实在单文件组件(SFC)中,<style>标签内也可以使用v-bind函数绑定数据。如上图第18行代码,使用v-bind(color)绑定了数据。当数据变化时,css样式随之变化:原理:(截取自Vue官方文档)实际的值会被编......
  • 启动vue-element-admin遇到问题解决方案
    概述从https://github.com/PanJiaChen/vue-element-admin下载代码,按照文档执行,期间遇到一些列问题。1#clonetheproject2gitclonehttps://github.com/PanJiaChen/vue-element-admin.git34#entertheprojectdirectory5cdvue-element-admin67#insta......