用于在用户加载网站时验证用户登录并重定向的Javascript

时间:2018-10-10 02:18:20

标签: javascript jquery ajax

我有一个C#MVC项目,这是我的Javascript文件,用于检查用户是否已登录。我遇到的问题是,即使我的shouldlogin的值交替出现,页面仍在刷新。该JS文件的目的是检查用户是否已登录,并将其重定向到Authorize Header保护的主页。我知道这并不是执行此操作的最佳方法,但是如果有人提供一些指导,将不胜感激。谢谢!

var shouldlogin = true;
var token = localStorage.getItem("token");

$(document).ready(function(){
    var loggedIn = checkLogin();

    if(loggedIn === true && shouldlogin === true)
    {
        if (shouldlogin === true)
        {
            setHeader();
            redirectToHome();
            return true;
        }
    }
    else if(loggedIn === false && shouldlogin === false)
    {
        redirectToLogin();
        return true;
    }
    return false;
});

function setHeader()
{
    $.ajaxSetup({
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Authorization', token);
        }
    });
}

function redirectToHome()
{
    shouldlogin = false;
    $.ajax({
            type: 'GET',
            contentType: 'application/json; charset=utf-8;',
            url: 'Home/Index',
            success: function (response) {                
                $("body").html(response);
            }
    });  
}

function checkLogin()
{
    if (token === null)
    {
        return false;
    }
    else 
    {
        return true;
    }
}

function redirectToLogin()
{  
    $.ajax({
        type: 'GET',
        contentType: 'application/json; charset=utf-8;',
        url: 'Account/Index',
        success: function (response) {                
            $("body").html(response);
        }
    });  
}

function logOut()
{
    shouldlogin = true;
    localStorage.clear();
    redirectToLogin();
}

编辑:我发现这陷入了无限循环,而忽略了我的条件语句。我将它们打印出来,它仍然表明它们不应该真正落在第一个if(导致无限刷新的对象)内部。

1 个答案:

答案 0 :(得分:0)

请注意,如果此JS脚本正在浏览器中执行,则可能是安全问题。攻击者可以在浏览器中修改您的脚本并绕过您的登录逻辑。通常,此检查应在服务器端进行。如果服务器发现客户端未登录,则它将重定向到登录页面,只有在此之后,它才能向客户端授予对所请求资源的访问权限。