【问题标题】:User authentication without back-end无后端的用户认证
【发布时间】:2017-02-22 10:44:22
【问题描述】:

我有一个简单的 Backbone.js 应用程序,其中包含具有不同角色的 User 模型,我使用 json-server 来模拟一些后端基础知识。我需要进行基本身份验证——即我需要我的用户能够登录并在某处保存他的会话(因为他每次刷新浏览器时都不需要登录)。我有一个db.json 文件,其中已经有一些用户:

{
    "users": [
        {
            "login": "admin",
            "password": "password",
            "role": "admin",
            "id": 1
        }
    ]
}

这是我的User 模型:

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;
    }
});

我不太了解如何管理身份验证(即在表单中输入 loginpassword 并在没有适当后端的情况下存储用户会话)。我想过在我的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-server 中查找用户,它只是创建一个新用户,除了 #js-login#js-password 输入字段的值之外,所有属性都为空

添加我想我应该在我的收藏中通过上面url 中的查询找到我的用户,但我实际上不知道如何管理它

Repo with my project

【问题讨论】:

    标签: javascript jquery session backbone.js login


    【解决方案1】:

    这里你可以参考这个插件,它主要使用文档here中提到的jquery函数

    我不会详细介绍,因为文档很清楚。 这是指使用jquery进行身份验证

    现在如果您想使用backbone.js 对用户进行身份验证

    如果路由返回 {loggedIn: false},则骨干路由器只会将用户发送到登录/注册页面。但如果它返回一个用户个人资料信息,那么显然意味着他有一个会话。

    连接 $.ajax 以响应 401(未授权)状态代码。

    还要提及this stackoverflow 线程

    希望对你有所帮助。

    Here 是使用backbone.js 进行身份验证的分步指南

    【讨论】:

      【解决方案2】:

      这是您应用的简化流程:

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

        • 如果 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,可以参考How do I set/unset cookie with jQuery?

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

      【讨论】:

      • 谢谢!这看起来正是我需要的东西。但是我不太明白如何从我的登录表单中获取用户的登录名和密码,找到这个用户并将他的凭据存储在 cookie 中。你能再解释一下吗?
      • 我更新了答案。顺便说一句,您在评论中的问题很受欢迎,例如更好地搜索谷歌。
      • 我尝试了您的变体,它似乎创建了一个新用户而不是获取一个已经存在的用户:( 它只是创建一个具有空属性的新用户,除了登录名和密码,我输入输入字段而不是找到具有这些凭据的人
      • 在userModel.fetch()的success回调中,如果从服务器接收到的数据是正确的,则放入此行调试:console.log(userModel.toJSON());backbonejs.org/#Model-toJSON
      • 响应是一个新的空 User 模型,它的唯一属性是我在输入字段中输入的 loginpassword
      猜你喜欢
      • 2015-11-15
      • 2017-11-14
      • 1970-01-01
      • 2011-06-28
      • 2018-06-17
      • 2015-09-06
      • 1970-01-01
      • 2012-06-02
      • 2012-09-18
      相关资源
      最近更新 更多