Javascript 无后端的用户身份验证

Javascript 无后端的用户身份验证,javascript,jquery,session,backbone.js,login,Javascript,Jquery,Session,Backbone.js,Login,我有一个简单的Backbone.js应用程序,它具有不同角色的用户模型,我用来模拟一些后端基础。我需要做一个基本的身份验证——也就是说,我需要我的用户能够登录并将他的会话保存到某个地方(因为他不需要每次刷新浏览器时都登录)。我有一个db.json文件,其中已经有一些用户: { "users": [ { "login": "admin", "password": "password", "role":

我有一个简单的Backbone.js应用程序,它具有不同角色的
用户
模型,我用来模拟一些后端基础。我需要做一个基本的身份验证——也就是说,我需要我的用户能够登录并将他的会话保存到某个地方(因为他不需要每次刷新浏览器时都登录)。我有一个
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中,以备下次检查

您可以使用某种机制对用户信息(令牌、加密…)进行编码,以保护存储在cookie/会话中的信息。但在客户机中存储身份验证数据库确实是一个薄弱的安全点。示例代码如下:

型号:

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())
响应是一个新的空
用户
模型,它唯一的属性是我在输入字段中输入的
登录
密码