Authentication trong AngularJS



  • Chào các bác,
    Hiện nay em dùng nodejs với sailsJS làm server. Hiện trên server của em đã cài passportJS để auth.

    Cho em hỏi các bác trên diễn đàn các bác thường dùng cách gì để xác thực và phân quyền người dùng trên angularJS.
    Cảm ơn các bác!



  • Có nhiều cách xác thực và phân quyền trong angularJS. Bạn có thể phân quyền cho từng route bằng cách sử dụng các module của angularJS như ng-route hoặc ui-router. Khi route, xác định xem user đang đăng nhập có quyền nào để route cho phù hợp.
    Ví dụ: Khi một user đăng nhập vào hệ thống:

    1. Sau khi xác thực trên server thì trả lại cho client thông tin về user với quyền tương ứng. Thông tin này lưu vào trong một biến rootScope của angular hoặc sử dụng service/factory để lưu lại.

    2. Khi user muốn vào một trang nào đó, đồng nghĩa với việc route bị thay đổi thì ta kiểm tra quyền của user. Nếu user có quyền thì cho đi tiếp còn nếu không có quyền ta sẽ chuyển tới một trang mặc định nào đó.


  • Angel

    Cùng câu hỏi, bác @name-no có ví dụ nào không cho dễ hiểu với ạ?



  • @Bùi-Công-Đăng @thanhbinh

    Với Angular thì thực tế nó chỉ tương tác với Server thông qua API vì nó là SPA. Vì vậy mọi thứ bạn phải xử lý qua API.

    1. Xác thực
      Xác thực với Angular bạn phải tự sign in với Facebook hoặc Google để lấy được Token và các thông tin khác của user.
      Sau đó gửi thông tin auth facebook lên Server của mình để tự check lại Token mà Facebook trả về (hình như token này tồn tại trong 3 phút).
      Nếu data facebook trả về có email tồn tại trong DB thì chỉ việc login luôn và update facebook id và facebook profile.
      Còn nếu chưa thì bạn tạo mới và set quyền.

    2. Phân quyền
      Cái này cũng có nhiều cách, như mình thì check roles qua APIs router. Thường mình sẽ găm role thẳng vào token để khi request lên server thì chỉ việc decode token => sau đó dùng policies ở sails để group role lại


Log in to reply