2016-10-13 36 views
1

我有一個簡單的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中時填寫,但我不明白我怎麼能這樣做。如果有人能幫助我完成這項任務,我將非常感激。

ADDDED這在我看來是我的登錄功能:

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輸入字段

ADDED我想我應該在我的收藏品在上述url查詢發現我的用戶,但我沒有真正得到我將如何管理該

Repo with my project

回答

1

這是簡化流程爲您的應用程序:

  • 每次用戶打開你的網站,檢查他的餅乾。

    • 如果cookie包含用戶信息(保存的用戶名,密碼),請檢查與數據庫中的信息匹配。如果匹配,則轉到主頁。否則,清除Cookies,請登錄頁面

    • 如果Cookie不包含用戶信息,請登錄頁面

  • 在登錄頁面,用戶成功後登錄,用戶信息保存到cookie進行下一時間檢查。

您可以使用某種機制對用戶信息(令牌,加密等)進行編碼以保護存儲在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/

+0

謝謝!這看起來正是我需要的東西。但我不明白我將如何從我的登錄表單中獲取用戶的登錄名和密碼,找到此用戶並將其憑據存儲在Cookie中。你能解釋一點嗎? – AlexNikolaev94

+1

我更新了答案。順便說一句,你的問題在評論是非常流行的,更好的搜索谷歌例如。 – Akivamu

+0

我試過你的變體,它似乎創建一個新的用戶,而不是得到一個已經存在的:(它只是創建一個新的用戶,除了登錄和密碼,我輸入到輸入字段,而不是找到一個與這些憑據登錄和密碼 – AlexNikolaev94

0

這裏你可以參考這個插件,主要使用文檔中提到的jQuery功能here

我不會詳細介紹文檔,因爲文檔非常清晰。 這是指驗證與jQuery的

現在如果你想使用Backbone.js的

如果路由帶回來,以驗證用戶{的loggedIn:假}骨幹路由器將用戶發送到只有登錄/註冊頁面。但是如果它回來了一個用戶配置文件信息,那麼這顯然意味着他有一個會話。

連接$ .ajax以響應401(未授權)狀態代碼。

也爲在this計算器線程表示

希望它也許能幫助你一點。

Here是一步一步的指導,以驗證與backbone.js

相關問題