前端登录流程

1.登录页 输入账号密码登录调用登录接口,参数一般为账号密码(一般密码需要加密),接口返回token,前端将token保存至本地 后续接口需要用到

loginApi.login({ params })
        .then((res) => {
          if (res.code === 200) {
                this.$message.success("登录成功");
                localStorage.setItem(LSKey.token, res.data.token);
                    this.$router.push("/home/index");
                })
                .catch((err) => {
                    this.$message.error(err.msg);
                })
                .finally(() => {
                    this.loading = false;
                });
           }

2. 在axios请求拦截器将本地的token挂载到请求头 供接口使用(判断token过期,顶号等),出现异常在响应拦截器弹出提示清空token用户信息返回登录页

//创建axios的一个实例
var instance = axios.create({
    timeout: 20000, //设置超时
});

//------------------- 一、请求拦截器 
instance.interceptors.request.use(
    function (config) {
        if (localStorage.getItem(LSKey.token)) {
            config.headers["X-Auth-Token"] = localStorage.getItem(LSKey.token);
        }
        return config;
    },
    function (error) {
        return Promise.reject(error);
    }
);
//----------------- 二、响应拦截器
instance.interceptors.response.use(
    function (response) {
        let res = response.data;
        if (res.code === 200) {
            return res;
        } else if (
            // 401, 未提供、未提供有效token、登陆信息已过期,请重新登陆、您的账号已在另一台设备登陆,如非本人操作,请立即修改密码
            // 340001, "用户无权限"
            res.code === 401 ||
            res.code === 340001 ||
            res.code === 360001
        ) {
            authError({
                callback: () => {
                    localStorage.removeItem(LSKey.token);
                    vm.$store.dispatch("user/clearUserInfo");
                    vm.$store.dispatch("pagettab/clearTabList");
                    sessionStorage.clear();
                    vm.$message.error(res.msg || "请稍后重试");
                    //如果不是登录页
                    if (vm.$route.path != "/login") {
                        let timer = setTimeout(() => {
                            clearTimeout(timer);
                            vm.$store.dispatch("user/loginOutHandle");
                            vm.$router.push("/login?type=userLogout");
                        }, 1000);
                    }
                },
            });
            return Promise.reject(res);
        } else {
            authError({
                callback: () => {
                    vm.$message.error(res.msg || "请稍后重试");
                },
            });
            return Promise.reject(res);
        }
    },
    function (error) {
        // 对请求错误做些什么
        if (error.response) {
            authError({
                callback: () => {
                    vm.$message.error(error.response.msg || "请稍后重试");
                },
            });
        }
        return Promise.reject(error.response.data);
    }
);

3.在项目进入页 created或者mounted 获取用户信息,因为token挂载到请求头上,可获取用户信息接口,存入store中

4.同时还要考虑到用户直接输入对应url进入页面,虽然用户拿着错误的token,访问页面调用接口会异常,响应拦截器会清空打回登录页,但是为了保险需要在路由前置守卫进行拦截,也可拓展权限

export function beforeEach(to, from, next, router) {
    if (to.path != "/login") {
        if (!localStorage.getItem(LSKey.token)) {
              return next({ path: "/login", query: {} });
        } else {
            let accountType = getStoreSession().state.user.roles;
            if (to.meta.requiresAuth && !accountType.includes("1")) {
                Message.error("您没有权限访问此页面!");
                getStoreSession().dispatch("user/loginOutHandle");
                router.push("/login?type=userLogout");
            } else {
                return next();
            }
        }
    }
    return next();
}

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web前端密码登录框架是一种用于实现用户登录功能的解决方案。它通常通过HTML、CSS和JavaScript等技术来设计和实现。 一个基本的密码登录框架通常包含以下几个关键组件: 1. 用户界面:密码登录框架需要提供一个用户界面,通常通过HTML和CSS来实现。这个用户界面需要包括输入用户名和密码的输入框以及一个登录按钮。 2. 表单验证:在用户点击登录按钮后,密码登录框架需要对用户名和密码进行验证。这可以通过JavaScript来完成,可以使用正则表达式等方法对输入框中的内容进行校验,确保输入合法。 3. 数据传输:验证通过后,密码登录框架需要将用户输入的用户名和密码发送到后台服务器进行进一步验证。这可以通过HTTP请求来完成,一般使用POST方法把数据发送给服务器。 4. 后台验证:后台服务器收到密码登录框架发送的用户名和密码后,需要进行一系列的验证操作,例如检查用户名是否存在,密码是否正确等。如果验证成功,服务器会返回一个成功的响应,否则返回相应的错误信息。 5. 登录结果处理:密码登录框架需要根据后台服务器返回的验证结果进行相应的处理。如果登录成功,可以跳转到其他页面或显示登录成功的提示信息;如果登录失败,可以重新显示登录界面或显示登录失败的提示信息。 通过以上组件的设计和交互,密码登录框架可以提供简单、方便和安全的用户登录功能。开发者可以根据自己的需求进行定制和扩展,以满足不同的业务场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值