前端登录态验证


```java
<!--<html xmlns:th="http://www.thymeleaf.org">-->
<div th:fragment="html">
    <script>
        Vue.config.productionTip = true;
        $(function () {
            var data4Vue = {
                uri: 'api/iam/user/v1.2/userlogin',
                user: {name: '', password: ''},
                result: [],
                headers: [],
                checkVCode: '',
            };

            //ViewModel
            var vue = new Vue({
                el: '#workingArea',
                data: data4Vue,
                mounted: function () {
                    localStorage.getItem("Authorization");
                    linkDefaultActions();
                },
                methods: {
                    interceptor: function () {
                        console.log("拦截器检查" + config);
                        // 配置拦截器,中间件思想。白话:use 给请求之前做的事,可以是多件,可以 use 多次
                        /*this.$*/
                        axios.interceptors.request.use((config) => {
                                console.log('请求拦截器:');
                                console.log(config);
                                // 设置请求头,在这里插入代码片,类似 set-cookie
                                if (localStorage.getItem('Authorization') != null) {
                                    // config.headers = {} 这样设置,是覆盖
                                    config.headers['Authorization'] = localStorage.getItem('Authorization'); // 这样设置,是添加
                                }
                                return config;
                            },
                            error => {
                                console.log(error);
                                return Promise.reject(error);
                            });
                        // 响应拦截器
                        /*this.$*/
                        axios.interceptors.response.use((response) => {
                                console.log('响应拦截器:');
                                console.log(response);
                                // 获取服务器的响应头
                                if (response.headers.authorization) {
                                    //console.log(response.headers.authorization);
                                    localStorage.setItem('Authorization', response.headers.authorization);
                                }
                                return response;
                            },
                            error => {
                                console.log('err' + error)
                                Message({
                                    message: error.message,
                                    type: 'error',
                                    duration: 5 * 1000
                                })
                                return Promise.reject(error)
                            });
                    },
                    login: function () {
                        //this.interceptor();

                        //登录页面输入检查
                        if (0 == this.user.name.length) {
                            $("span.errorMessage").html("请输入用户名");
                            $("div.loginErrorMessageDiv").css("visibility", "visible");
                            return;
                        }
                        if (0 == this.user.password.length) {
                            $("span.errorMessage").html("请输入密码");
                            $("div.loginErrorMessageDiv").css("visibility", "visible");
                            return;
                        }

                        if (document.getElementById("vCodeResultIcon").className.localeCompare("bi bi-check-circle-fill")) {
                            $("span.errorMessage").html("验证码检查未通过");
                            $("div.loginErrorMessageDiv").css("visibility", "visible");

                            getCaptcha();
                            return;
                        }
                        //axios.defaults.headers['Authorization'] = window.localStorage.getItem("Authorization");
                        //登录请求
                        axios.post(this.uri, this.user)
                            .then(function (response) {
                                //console.log(response);
                                if (response.data.code == 0) {
                                    console.log("打印返回的token:" + response.headers.authorization);
                                    localStorage.setItem("Authorization", response.headers.authorization);
                                    //axios.defaults.headers.common['Authorization'] = localStorage.getItem("Authorization");
                                    //Router.get({path: 'home'});
                                    //location.href = "fore/home.html";
                                    //location.replace("home");
                                    //goHome();
                                    //location.redirect = "home.html";
                                } else {
                                    $("span.errorMessage").html(response.data.message);
                                    $("div.loginErrorMessageDiv").css("visibility", "visible");
                                }
                            })
                            .catch(function (error) {
                                alert("login error:" + error);
                            }).then(function () {
                            getCaptcha();
                        });
                    },
                    refreshCaptcha: function () {
                        getCaptcha();
                    },
                },
                watch: {
                    checkVCode: function () {
                        if (document.getElementById("vcodeStr").value.length == 4) {
                            //this.interceptor();
                            axios.post("captcha/v1/checkCaptcha?vCode=" + document.getElementById("vcodeStr").value/*+"&time="+new Date().getMinutes()+new Date().getMilliseconds()*/)
                                .then(function (response) {
                                    if (response.data.code == 0) {
                                        document.getElementById("vCodeResultIcon").className = "bi bi-check-circle-fill";
                                    } else {
                                        getCaptcha();
                                    }
                                })
                                .catch(function (error) {
                                    alert("checkVCode error:" + error);
                                });
                            ;
                        } else {
                            document.getElementById("vCodeResultIcon").className = "bi bi-x-circle-fill";
                        }
                        document.getElementById("vCodeResultIcon").style.visibility = "visible";
                    }
                },
            });

            $("div.loginSmallDiv").css("padding", 50, 25, 0, 25);
            $("div.loginSmallDiv").css("width", 350);
            $("div.loginSmallDiv").css("height", 450);
        });

        function  getCaptcha() {
            axios.get("captcha/v1/getCaptcha")
                .then(function (response) {
                    document.getElementById("randImg").src = "captcha/v1/getCaptcha";
                }).catch(function (error) {
                alert("getCaptcha error:" + error);
            });
            document.getElementById("vCodeResultIcon").style.visibility = "hidden";
            document.getElementById("vCodeResultIcon").className = "bi bi-x-circle-fill";
            document.getElementById("vcodeStr").value = "";
        }
    </script>
<a href="/dreamfuture/fore/home.html">home</a>
    <div id="loginDiv" style="position: relative;" align="center">
        <!--<img id="loginBackgroundImg" class="loginBackgroundImg" src="img/site/loginBackground.png" height="500">-->
        <div id="loginSmallDiv" class="loginSmallDiv" style="background-color: aliceblue">
            <div class="loginErrorMessageDiv" style="visibility: hidden">
                <div class="alert alert-danger">
                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"></button>
                    <span class="errorMessage"></span>
                </div>
            </div>
            <!--<div>
                <p th:text="${result.message}" th:if="${not #strings.isEmpty(result.message)}"></p>
            </div>-->
            <div class="h4 mb-3 fw-normal">账户登录</div>
            <div class="input-group">
                <span class=" input-group-addon"><i class="bi bi-person"></i></span>
                <input v-model="user.name" class="form-control" placeholder="手机/会员名/邮箱" type="text" required v-focus>
            </div>
            <br>
            <div class="input-group">
                <span class=" input-group-addon"><i class="bi bi-key"></i></span>
                <input v-model="user.password" type="password" class="form-control" placeholder="密码" required>
            </div>
            <br>
            <div class="input-group">
                <span class=" input-group-addon">
                    <i class="bi bi-input-cursor-text"></i></span>
                <input v-model="checkVCode" id="vcodeStr" type="text" name="vcodeStr" class="form-control"
                       placeholder="请输入验证码"
                       maxlength="4"
                >
                <span class=" input-group-addon"><i class="bi bi-"></i></span>
                <span class=" input-group-addon">
                    <i class="bi bi-x-circle-fill" style="visibility: hidden" id="vCodeResultIcon"></i></span>
                <img src="captcha/v1/getCaptcha" id="randImg" @click="refreshCaptcha">
            </div>
            <br>
            <div class="checkbox mb-3">
                <label>
                    <input type="checkbox" value="remember-me" class="right-button"> 记住我
                </label>
                <label>
                    <input type="checkbox" value="remember-me"> 忘记密码
                </label>
            </div>
            <div style="margin-top:20px">
                <button class="w-50 btn btn-primary" type="button" @click="login">登录</button>
            </div>
            <br>
            <div>
                <a class="pull-left" href="#nowhere">忘记登录密码</a>
                <a href="register" class="pull-right">免费注册</a>
            </div>
        </div>
    </div>
</div>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值