仅使用Javascript的基于角色的登录

仅使用Javascript的基于角色的登录,javascript,html,Javascript,Html,只是一个简单的问题。 您认为可以使用Localstorage i Javascript创建基于角色的登录系统吗?没有使用任何库或框架(不允许)?我的方法是创建一个具有两个不同授权级别的“用户”类,该类将重定向到两个不同的html站点:) 您认为可以使用Localstorage i Javascript创建基于角色的登录系统吗 可以创建它,但它不会是远程安全的。任何用户都可以获得他们想要的任何访问权限,因为没有保存在浏览器中的信息对有动机的用户隐藏 如果您想完全用JavaScript实现这一点,那

只是一个简单的问题。 您认为可以使用Localstorage i Javascript创建基于角色的登录系统吗?没有使用任何库或框架(不允许)?我的方法是创建一个具有两个不同授权级别的“用户”类,该类将重定向到两个不同的html站点:)

您认为可以使用Localstorage i Javascript创建基于角色的登录系统吗

可以创建它,但它不会是远程安全的。任何用户都可以获得他们想要的任何访问权限,因为没有保存在浏览器中的信息对有动机的用户隐藏

如果您想完全用JavaScript实现这一点,那没关系,只需确保一些JavaScript在服务器上运行,将身份验证和角色信息存储在服务器端(您可以将当前用户的角色信息回显到客户端以用于UI),并将所有操作保留在服务器端


关于问题中代码的几个注释:

  • 旁注:JavaScript中压倒性的惯例是,构造函数函数,如
    userLogin
    以大写字母开头(如
    Date
    Map
    ,等等),因此
    userLogin

  • if
    的一个分支中获得
    userLogins
    很奇怪,但在另一个分支中获得
    employeeList
    。建议只使用一个登录列表,而不是两个登录列表,这取决于它们是否已经存在

  • getItem
    接受要获取的项的字符串键,因此此行:

    if(localStorage.getItem(userLogin) == null){
    
    userLogin
    隐式转换为字符串,并使用该键查找值。您的
    userLogin
    是一个使用
    class
    语法创建的构造函数,默认情况下,它将转换为包含类代码的字符串,该字符串可能不是您想要使用的键

    从您以后的代码中,我怀疑您想做类似的事情(这也包含了上面的其他反馈):


但是,这一点也不安全。不过,您已经说过,这是学校项目的第一步,所以…

请不要这样做。任何用户都可以轻松查看所有用户名和密码,因为它们存储在客户端。任何用户也可以随意更改其authLevel。这需要在服务器上完成。我知道,这只是一个学校项目:)我们还没有使用数据库:)
if(localStorage.getItem(userLogin) == null){
let userLogins = JSON.parse(localStorage.getItem("userLogin"));
if (!userLogins) {
    userLogins = [
        new UserLogin("Benjamin", 4321,"1" ),
        new UserLogin("Mads",12345,"1"),
        new UserLogin("Simon",1234,"1"),
        new UserLogin("Jessica", 54321,"1"),
        // Logins for Projectmanagers
        new UserLogin("Oliver",1234,"2"),
        new UserLogin("Sara",4321,"2"),
    ];
    localStorage.setItem("userLogin", JSON.stringify(userLogins));
}
// ...use `userLogins`