Vue前端登录token信息验证功能实现

用户在首次访问网站时,应在登录页面填写账号密码,前端携带用户信息向服务器请求。

1、服务器验证用户信息

验证失败:给前端响应数据

验证通过:对该用户创建token,并以响应数据返回给前端

2、前端接受后端响应的数据

错误信息:提示错误消息

正确信息:页面进行跳转至首页,同时保存token(可以保存在cookie或localstorage)

3、用户点击某功能模块的触发请求(比如某功能有权限设置或是是否需要token)

利用路由守卫beforeEach()

将保存的token添加至请求拦截器的请求头中,并根据响应拦截器返回的状态码判断该功能模块是否有权限做出相应的跳转或拦截。

request.js

// 对于axios进行二次封装
import axios from 'axios';
const requests = axios.create({
    // 配置对象
    // 基础路径,发请求的时候,路径当中会有api
    baseURL: "/api",
    // 代表请求超时的时间 5s
    timeout: 5000,
});

// 请求拦截器:在发请求之前,请求拦截器可以监测到,可以在请求发出去之前做一些事情
requests.interceptors.request.use(
    (config)=>{
        const token = localStorage.getItem('token');
        // console.log('token',token);
        if(token) {
            let token = JSON.parse(localStorage.getItem('token')).token;
            config.headers['Authorization'] = token;
        }
    return config;
});
// 响应拦截器
requests.interceptors.response.use(
    (res)=>{
        const { status, data,message } = res
        if(data.success){
           return data
        }else{
            // 假设后端返回状态码20005代表没有访问权限
            if (data.code === 20006) {
                alert('您没有该功能的权限!')
            }
            // 将错误信息通过Promise返回,
            return Promise.reject(message)
        }
    },(error)=>{
        // 服务器响应失败的回调函数
        return Promise.reject(error);
    }
);
// 对外暴露
export default requests;

Login.vue

    submitLogin(formName){
            this.$refs[formName].validate(async (valid) => {
                if (valid) {
                    // 先发送请求,验证用户
                    const {username,password} = this.loginForm;
                    let result = await this.$API.login.reqLogin(username,password);
                    if(result.code == 200){
                        // 成功后存储token并路由跳转
                        let token = {
                            time: new Date().getTime(),
                            token: result.data
                        };
                        localStorage.setItem("token",JSON.stringify(token));
                        this.$router.replace('/home');
                        this.$message({type:'success',message:'登录成功'});
                    }else{
                        alert('登录失败')
                    }
                } else {
                    this.$message.error('请重新输入账户和密码');
                    return false;
                }
            });
        }

在上面的代码中,将token和响应的时间戳一起保存成json对象,这样可以做到 每隔一定时间后需要重新登录的功能

router.js

// 判断登录是否过时,一天
let time=24 * 60 * 60 * 1000
// 全局前置守卫(路由跳转之前进行判断)
router.beforeEach((to, from, next) => {
    // 用户登录了才会有token,所以可以用来判断是否登录
    let token = JSON.parse(localStorage.getItem('token'));
    if (token) {
        let deltime = new Date().getTime()
        if(deltime - token.time > time){
            alert('登录已经过期,请重新登录')
            localStorage.removeItem('token')
            next('/login')
        }else{
          next()
        }
    } else {   // 若没有token,访问登录页面放行,其他的路由请求均拒绝,跳转到登录页
        if (to.path == '/login') {
            next()
        } else {
            if(from.path == '/'){
                next('/login')
            }else{
                alert('请先登录,再访问其他页面')
                next('/login')
            }
        }
    }
})

到此这篇关于Vue前端登录token信息验证功能实现的文章就介绍到这了,更多相关Vue token验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue项目中token验证登录(前端部分)

    本文实例为大家分享了Vue项目中token验证登录的具体代码,供大家参考,具体内容如下 1.前言 最近在做毕业设计,我是做后端的,前端并不是很懂,看vue这个框架看了近两个礼拜才有点入门的感觉,所以这篇文章写的可能不怎么好,仅作记录,有什么不对或不足的地方欢迎大神指出. 2.问题 做一个登录界面,我选择的是用token进行验证登录,我用的前端框架是Vue.js 和 element-ui,如何在vue 中使用token进行验证登录 3.思考 1.利用token进行验证登录,用户进行登录操作时,后台

  • Vue前端登录token信息验证功能实现

    用户在首次访问网站时,应在登录页面填写账号密码,前端携带用户信息向服务器请求. 1.服务器验证用户信息 验证失败:给前端响应数据 验证通过:对该用户创建token,并以响应数据返回给前端 2.前端接受后端响应的数据 错误信息:提示错误消息 正确信息:页面进行跳转至首页,同时保存token(可以保存在cookie或localstorage) 3.用户点击某功能模块的触发请求(比如某功能有权限设置或是是否需要token) 利用路由守卫beforeEach() 将保存的token添加至请求拦截器的请求

  • thinkphp5框架API token身份验证功能示例

    本文实例讲述了thinkphp5框架API token身份验证功能.分享给大家供大家参考,具体如下: 使用说明:登陆时生成token和刷新用的refresh_token,返回给客户端,客户端收到保存本地localStorage等,每次访问接口带上token,后端验证token存在并且一致后方可执行接下来的动作,假如不存在就返回token过期,客户端调用刷新接口传入token和refresh_token,服务器端进行验证,验证通过重新生成新的token保存数据库,返回给客户端客户端刷新本地toke

  • Vue实现登录记住账号密码功能的思路与过程

    目录 实现思路 这里有三种方法来存储账号密码: 功能界面 记住账号密码功能的具体实现 密码加密 localStorage cookies 总结 实现思路 用户登录时若勾选"记住我"功能选项,则将登录名和密码(加密后)保存至本地缓存中,下次登录页面加载时自动获取保存好的账号和密码(需解密),回显到登录输入框中. 这里有三种方法来存储账号密码: 1. sessionStorage(不推荐) 1). 仅在当前会话下有效,关闭浏览器窗口后就被清除了 2). 存放数据大小一般为5MB 3). 不

  • PHP实现的登录页面信息提示功能示例

    本文实例讲述了PHP实现的登录页面信息提示功能.分享给大家供大家参考,具体如下: login.php: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="check_login.php"

  • Java Web实现登录页面验证码验证功能

    一.验证码 验证码本质上是一张图片,图片内容会随着程序的运行而随机生成 验证码的作用:防止应用恶意发送数据,一定程度上避免了恶意程序对网站的攻击. 验证码本质上是一张图片,图片内容的准确解析不容易用程序来实现. 验证码的绘制:绘制验证码图片不仅仅需要随机生成要绘制的内容,同时要配合Java中与绘图有关的一套API来完成. 二.效果演示 验证码Demo 三.给出完整代码 (1)服务器端代码ActionServlet.java package session; import java.io.IOEx

  • Bootstrap实现前端登录页面带验证码功能完整示例

    本文实例讲述了Bootstrap实现前端登录页面带验证码功能.分享给大家供大家参考,具体如下: Bootstrap有自定义的验证码样式,在前端页面可以直接使用,他的css.js在使用前要在开头引入 上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <!-- 告诉浏览器网页所识别的文件类型及语言类型 --> <meta http-equiv="X-

  • vue实现登录时滑块验证

    本文实例为大家分享了vue实现登录时滑块验证的具体代码,供大家参考,具体内容如下 1.效果图 2. 新建 SliderCheck.vue组件 <template> <!--  拖动验证-->   <div class="slider-check-box">     <div class="slider-check" :class="rangeStatus ? 'success' : ''">    

  • vue实现登录滑动拼图验证

    本文实例为大家分享了vue实现登录滑动拼图验证的具体代码,供大家参考,具体内容如下 一.安装插件 npm install --save vue-monoplasty-slide-verify 二.main.js引入 import SlideVerify from '../node_modules/vue-monoplasty-slide-verify' // 拼图验证码 Vue.use(SlideVerify) 三.组件中使用 html(自定义关闭按钮,添加变量控制弹窗显隐) <!-- 拼图验证

  • Vue3实现登录表单验证功能

    目录 一.实现思路与效果图 二.实现具体过程 三.完整代码与效果图 一.实现思路与效果图 使用async-validator 插件,阿里出品的 antd 和 ElementUI 组件库中表单校验默认使用的 async-validator. 效果图: 二.实现具体过程 npm i async-validator -S 绑定loginForm const loginForm = reactive({ username: "", password: "", }); 初始化

随机推荐