Javascript 无后端的用户身份验证
我有一个简单的Backbone.js应用程序,它具有不同角色的Javascript 无后端的用户身份验证,javascript,jquery,session,backbone.js,login,Javascript,Jquery,Session,Backbone.js,Login,我有一个简单的Backbone.js应用程序,它具有不同角色的用户模型,我用来模拟一些后端基础。我需要做一个基本的身份验证——也就是说,我需要我的用户能够登录并将他的会话保存到某个地方(因为他不需要每次刷新浏览器时都登录)。我有一个db.json文件,其中已经有一些用户: { "users": [ { "login": "admin", "password": "password", "role":
用户
模型,我用来模拟一些后端基础。我需要做一个基本的身份验证——也就是说,我需要我的用户能够登录并将他的会话保存到某个地方(因为他不需要每次刷新浏览器时都登录)。我有一个db.json
文件,其中已经有一些用户:
{
"users": [
{
"login": "admin",
"password": "password",
"role": "admin",
"id": 1
}
]
}
这是我的用户
型号:
var User = Backbone.Model.extend({
defaults: {
login: "",
password: "",
role: ""
},
// Updated
url: function () {
return "http://localhost:3000/users?login=" +
this.attributes.login + "&password=" + this.attributes.password;
}
});
我不太了解如何管理身份验证(即在表单中输入登录
和密码
,并在没有适当后端的情况下存储用户会话)。我想在我的用户
模型中创建一个令牌
字段,并在用户每次登录时填写该字段,然后将其保存在cookies中,但我不知道如何做到这一点。如果有人能帮我完成这项任务,我将不胜感激
添加这是我视图中的登录功能:
signIn: function () {
var login = $('#js-login').val();
var password = $('#js-password').val();
if (login && password) {
var currentUser = new User({
login: login,
password: password
});
currentUser.fetch({
success: function () {
console.log(currentUser.toJSON());
},
error: function (err) {
console.log(err);
}
});
}
}
但是,它没有从我的json服务器中查找用户,而是创建了一个新用户,除了#js login
和#js password
输入字段的值之外,所有属性都为空
添加了我想我应该在我的收藏中通过上面的url
中的查询来找到我的用户,但我不知道该如何管理它
这是应用程序的简化流程:
- 每次用户打开你的网站,检查他的cookies
- 如果Cookie包含用户信息(保存的用户名、密码),请检查是否与数据库中的信息匹配。如果匹配,请转到主页。否则,清除cookies,转到登录页面
- 如果Cookie不包含用户信息,请转到登录页面
- 在登录页面中,用户成功登录后,将用户信息保存到cookies中,以备下次检查
var User = Backbone.Model.extend({
url: function () {
return "users?login" + this.attributes.login + "&password=" + this.attributes.password;
},
isAdmin: function () {
return (this.get("role") == "admin");
}
});
在你看来:
// Load username password from cookie (just simple example)
var username = $.cookie("username"),
password = $.cookie("password");
if (username && password) {
var userModel = new User({
login: username,
password: password
});
userModel.fetch({
success: function () {
if (userModel.isAdmin) {
// e.g. go to admin page
} else {
// e.g. go to normal user page
}
// Save to cookie/session here
},
error: function () {
// Go to login page
}
});
} else {
// Go to login page
}
关于cookie,您可以参考
关于获取用户名/密码输入表单,您只需使用简单的jquery选择器(例如,很容易在google上找到它)。这里您可以参考这个插件,它主要使用文档中提到的jquery函数 我不想说太多细节,因为文件很清楚。 这是指使用jquery进行身份验证 现在,如果要使用backbone.js对用户进行身份验证 如果路由返回时带有{loggedIn:false},主干路由器只会将用户发送到登录/注册页面。但如果它返回用户档案信息,则显然意味着他有一个会话。 连接$.ajax以响应401(未经授权)状态代码 也要提到stackoverflow线程中所述的内容 希望它能对你有所帮助
是通过主干网进行身份验证的分步指南。js谢谢!这看起来正是我需要的。但我不太明白如何从我的登录表单中获取用户的登录名和密码,如何找到该用户并将其凭据存储在cookie中。你能再解释一下吗?我更新了答案。顺便说一句,你在评论中提出的问题很受欢迎,例如,更好地搜索谷歌。我尝试了你的变体,它似乎创建了一个新用户,而不是获得一个已经存在的用户:(它只是创建了一个新用户,其属性为空,但登录名和密码除外,我将其输入到输入字段中,而不是在userModel.fetch()的
success
callback中找到一个具有这些凭据的用户,如果从服务器接收到的数据正确,则将此行放入调试:console.log(userModel.toJSON())
响应是一个新的空用户
模型,它唯一的属性是我在输入字段中输入的登录
和密码