javascript - 仅使用 Javascript 的基于角色的登录
问题描述
只是一个快速的问题。您认为可以使用 Localstorage i Javascript 创建基于角色的登录系统吗?不使用任何库或框架(不允许)?我的方法是创建一个具有 2 个不同授权级别的“用户”类,它将重定向到两个不同的 html 站点:)
class userLogin{
constructor(username, password, authLevel){
this.username = username;
this.password = password;
this.authlevel = authLevel;
}
}
// Localstorage logins
if(localStorage.getItem(userLogin) == null){
var userLogins = [];
userLogins.push(new userLogin("Benjamin", 4321,"1" ));
userLogins.push(new userLogin("Mads",12345,"1"));
userLogins.push(new userLogin("Simon",1234,"1"));
userLogins.push(new userLogin("Jessica", 54321,"1"));
// Logins for Projectmanagers
userLogins.push(new userLogin("Oliver",1234,"2"));
userLogins.push(new userLogin("Sara",4321,"2"));
var userLoginstring = JSON.stringify(userLogins)
localStorage.setItem("userLogin", userLoginstring)
} else {
var employeeList = JSON.parse(localStorage.getItem("userLogin"))
}
解决方案
您认为可以使用 Localstorage i Javascript 创建基于角色的登录系统吗?
可以创建它,但它不会是远程安全的。任何用户都将能够获得他们想要的任何访问权限,因为浏览器中保存的任何信息都不会对有动机的用户隐藏。
如果您想完全在 JavaScript 中执行此操作,那很好,只需确保一些 JavaScript 在服务器上运行,将身份验证和角色信息存储在服务器端(您可以将当前用户的角色信息回显到客户端) UI 目的),并将所有操作都保留在服务器端。
关于问题中代码的几点说明:
旁注:JavaScript 中压倒性的约定是构造函数,如您
userLogin
以大写字母开头(如Date
,Map
等),所以UserLogin
.userLogins
进入一个分支if
但进入另一个分支很奇怪employeeList
。建议只使用一个登录列表,而不是两个,这取决于它们是否已经存在。getItem
接受要获取的项目的字符串键,所以这一行:if(localStorage.getItem(userLogin) == null){
将隐式转换
userLogin
为字符串并使用该键查找值。YouruserLogin
是使用class
语法创建的构造函数,默认情况下将转换为包含类代码的字符串,这可能不是您要使用的键。从您以后的代码中,我怀疑您想做这样的事情(其中还包含了上面的其他反馈):
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`
但同样,这根本不安全。你说过你是作为学校项目的第一步做的,不过,所以...
推荐阅读
- reactjs - 404 错误:无法使用 django rest 框架提供静态反应构建,除非我去 /index.html
- reactjs - 如何使实用程序功能可用于所有组件
- pyarrow - 使用类似于 pandas 阅读器功能的 pyarrow 读取大型压缩 json 文件
- angular - Angular 9 Ivy 已禁用,但未定义文档中的错误
- python - 减少 matplotlib 中 log-log 子图的 bin 数量
- serenity-platform - 宁静平台;LocalText.Get("Db.something") 使用特定语言而不是所选语言?
- assembly - 使用 CPUID 指令了解 C 的编译器 mov [mem]、reg 指令
- reactjs - undefined 不是 react-native 中的对象(评估'context._context')
- css - 在不使用 flex-col 的情况下对齐 2 个元素
- reactjs - React-admin 在 List 中创建对话框