tôi sử dụng khái niệm phiên để kiểm soát trạng thái đăng nhập người dùng.
Tôi có một SessionModel và SessionCollection như thế này:
SessionModel = Backbone.Model.extend({
defaults: {
sessionId: "",
userName: "",
password: "",
userId: ""
},
isAuthorized: function(){
return Boolean(this.get("sessionId"));
}
});
On bắt đầu ứng dụng, tôi khởi tạo một biến có sẵn trên toàn cầu, activeSession. Lúc bắt đầu phiên này là trái phép và bất kỳ khung nhìn nào ràng buộc với cá thể mô hình này có thể hiển thị cho phù hợp. Khi đăng nhập, lần đầu tiên tôi đăng xuất bằng cách vô hiệu hóa phiên.
logout = function(){
window.activeSession.id = "";
window.activeSession.clear();
}
Điều này sẽ kích hoạt bất kỳ chế độ xem nào lắng nghe activeSession và sẽ đưa chế độ xem chính của tôi vào nơi đăng nhập. Sau đó tôi lấy tên người dùng và mật khẩu từ người dùng và đặt chúng trên activeSession như sau:
login = function(userName, password){
window.activeSession.set(
{
userName: userName,
password: password
},{
silent:true
}
);
window.activeSession.save();
}
Điều này sẽ kích hoạt cập nhật cho máy chủ thông qua backbone.sync. Trên máy chủ, tôi có thiết lập hành động POST tài nguyên phiên để nó kiểm tra tên người dùng và mật khẩu. Nếu hợp lệ, nó điền vào chi tiết người dùng trên phiên, đặt một id phiên duy nhất và xóa mật khẩu và sau đó gửi lại kết quả.
Backbone.sync của tôi sau đó được thiết lập để thêm sessionId của window.activeSession vào bất kỳ yêu cầu gửi đi nào đến máy chủ. Nếu Id phiên không hợp lệ trên máy chủ, nó sẽ gửi lại một HTTP 401, sẽ kích hoạt đăng xuất(), dẫn đến hiển thị lời nhắc đăng nhập.
Chúng tôi chưa thực hiện xong việc này, vì vậy có thể có lỗi trong logic, nhưng về cơ bản, đây là cách chúng tôi tiếp cận nó. Ngoài ra, mã trên không phải là mã thực tế của chúng tôi, vì nó có chứa một chút logic xử lý hơn, nhưng đó là ý chính của nó.
Bạn sẽ kiểm tra như thế nào trước khi có bất kỳ dữ liệu nào được nhận? Vì vậy, bất cứ khi nào ứng dụng thực hiện cuộc gọi cho dữ liệu, ứng dụng sẽ kiểm tra xem liệu chúng có được đăng nhập hay không. Nếu không, nó sẽ chuyển đến trang đăng nhập. – Matthew
Nếu bạn muốn thực hiện việc kiểm tra từng cuộc gọi đến chương trình phụ trợ, bạn nên tích hợp với mã phụ trợ của mình. Ví dụ: nếu người dùng không được xác thực cho cuộc gọi * any *, thì bạn có thể trả về một '401 Không được ủy quyền' từ chương trình phụ trợ của mình hoặc một thứ gì đó mà bạn có thể nắm bắt ở phía máy khách. Bằng cách này, bạn không phải thực hiện cuộc gọi riêng để kiểm tra ủy quyền trước mỗi yêu cầu dữ liệu. Trong trường hợp này, bạn có thể sẽ phải ghi đè phương thức 'Backbone.sync' để bắt giữ '401 Không được phép' và phát ra một số sự kiện mà bạn có thể sử dụng để phát hiện xem cuộc gọi phụ trợ có bị hủy hay không. – Sam
Đọc xuống vui lòng ↓ – user2398029