Tính năng remember me - giữ người dùng ở trạng thái đăng nhập



  • Mình đang làm web với ExpressJs và Angularjs, dùng passport-jwt để đăng nhập.
    Sau khi người dùng đăng nhập thì server trả về 1 token, user_id và username. Mình lưu tất cả trong cookie. Mỗi lần người dùng bật trang web lên mình sẽ kiểm tra xem trong cookie có token hay ko, nếu có thì coi như đăng nhập rồi.

    function isLoggedIn() {
    if ($cookies.get('token')) {
    return true;
    } else {
    return false;
    }
    }

    if (isLoggedIn) {
    $rootScope.username = $cookies.get('username');
    }

    Tất nhiên trên server vẫn có middleware để check xem user có thật sự đã login hay chưa hay chỉ là token giả do người dùng tạo:

    router.post('/info', authenticate(), function(req, res){})

    Tuy nhiên mình cảm thấy vẫn chưa hài lòng lắm vì người dùng có thể vào cookie, tạo một token giả nào đó, một username giả là đã coi như đăng nhập ở client. Mặc dù không truy cập được vào các routing ở server nhưng cảm thấy trang web của mình như bị hack vậy. Cho mình hỏi có cách nào khác để làm chức năng này không ?



  • Mình nghĩ mỗi lần gửi request phải gửi token về server để kiểm tra, nếu trong csdl có token thì mới cho qua còn ko thì bắt đăng nhập lại/cảnh báo ko có quyền truy cập. ...
    Về vấn đề cookie bạn có thể tham khảo thuộc tính httponly
    HttpOnly Optional
    HTTP-only cookies aren't accessible via JavaScript through the Document.cookie property, the XMLHttpRequest and Request APIs to mitigate attacks against cross-site scripting (XSS).



  • Mỗi lần mở web thì client check trong cookie (localStorage) có chứa jwt không. Nếu có thì dùng token đó để gọi 1 api để check thường là getUserInfo để check xem token có hợp lệ không đồng thời lấy thông tin displayName, avatar bạn nhé. (Thông tin user thì đừng lưu trong cookie, chỉ lưu mấy cái settings hoặc cái cần thôi).

    Còn về bản chất, người dùng có thể thích làm gì thì làm ở client nên cái đấy cũng không coi là hack đâu bạn, miễn là api của server secure là dc.


Log in to reply