首页 > 解决方案 > 如果未使用 localstorage 登录,我如何将人们重定向到登录名?

问题描述

我正在尝试做一个练习,要求我使用本地或会话存储进行登录,如果用户已登录,则必须在主页中检查,如果未登录,则应将其重定向到登录,如果是,它应该什么都不做,但我遇到的问题是它要么不检查本地存储,要么即使我已经登录,它也会不断将我重定向到登录。

对不起我的英语不好。

这是我一直在尝试的。

if (nombre.trim() === "" || pw.trim() === "") {
    alert("Debe ingresar su nombre.");
    console.log(nombre.trim())
} else {
    localStorage.setItem("nombre", nombre.trim());
    localStorage.setItem("pw", pw.trim());
    sessionStorage.setItem("nombre", nombre.trim());
    alert("Usuario:" + nombre + "Contraseña:" + pw)

    window.location.href = "index.html"
}

// This is what check if logged in the index:
var logeado = sessionStorage.getItem('nombre');
if (logeado === "" || logeado === null) {
    window.location.href = "login.html"
} else {
    alert('Fue logeado satisfactoriamente.')
}

另外我是编码新手,以防你们都没有注意到。

标签: javascriptlocal-storage

解决方案


如果您从未输入任何凭据,您的代码应该可以工作。但是,不可能再次注销用户,我认为这可能是您的问题。

如果没有提供新信息,您真的只想检查缓存。

空字符串是新信息。

所以你应该只在用户密码未定义时使用它,而不是当它们为空时。

这是一个有效的示例,如果我对您的缓存问题的看法是正确的,也应该对您有用。

let user = "my_user";
let pw = "secure_password";

if (typeof user === "string") {
    user = user.trim();
}
if (typeof pw  === "string") {
    pw = pw.trim();
}

if (user === "" || pw === "") {
    localStorage.setItem("user", "");
    localStorage.setItem("pw", "");
} else if (user !== undefined && pw !== undefined) {
    localStorage.setItem("user", user);
    localStorage.setItem("pw", pw);
}

var userLoggedIn = localStorage.getItem('user');
if (!userLoggedIn) {
  console.log("No user logged in");
} else {
  console.log(`User logged in: ${userLoggedIn}`);
}

推荐阅读