javascript - 无需后端的用户认证

标签 javascript jquery session backbone.js authentication

我有一个简单的 Backbone.js 应用程序,其中包含具有不同 Angular 色的 User 模型,我使用 json-server模拟一些后端基础知识。我需要进行基本身份验证 - 即我需要我的用户能够登录并将其 session 保存在某处(因为他不需要每次刷新浏览器时都登录)。我有一个 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;
    }
});

我不太清楚如何管理身份验证(即以表单输入登录名密码并在没有适当后端的情况下存储用户 session )。我想过在我的 User 模型中创建一个 token 字段,并在每次用户登录时填写并将其保存在 cookie 中,但我不知道该怎么做不管怎样。如果有人能帮助我完成这项任务,我将不胜感激。

添加这是我认为的登录功能:

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中的查询在我的集合中找到我的用户,但我实际上不知道如何管理它

Repo with my project

最佳答案

这是您的应用的简化流程:

  • 每次用户打开您的网站时,请检查他的 cookie。

    • 如果 cookie 包含用户信息(保存的用户名、密码),请检查与数据库中的信息是否匹配。如果匹配,则转到主页。否则,清除cookie,进入登录页面

    • 如果 cookie 不包含用户信息,请转到登录页面

  • 在登录页面,用户成功登录后,将用户信息保存到cookie中,以便下次查看。

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

型号:

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,可以引用How do I set/unset cookie with jQuery?

关于获取用户名/密码输入表单,您可以使用简单的 jquery 选择器(很容易通过 google 搜索,例如 https://www.formget.com/jquery-login-form/ )

关于javascript - 无需后端的用户认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40018795/

相关文章:

javascript - 以特定格式获取特定时区的当前日期时间

javascript - Highchart xAxis "6 Hours Ago","5 Hours ago"等等。当我的图表正在更新时

javascript - 移动到网页的第一个 'default' 焦点

javascript - 使用自动索引在循环中创建多维数组

java - 放入 session 中并具有动态 getter 的对象是否应该是线程安全的

php - codeigniter session 同时交换多个请求

javascript - Google Maps v3 DistanceMatrix/Directions 忽略 avoidTolls :false

javascript - 在鼠标悬停时播放随机轨道

jquery - 单击时在多张照片上添加复选标记

java - 如何在 Apache HttpClient 4.1 中处理 session