Cho mình hỏi vấn đề này với ạ.
Mình viết một ứng dụng có chức năng người dùng đăng nhập như nhiều sách, bài viết đã giải thích như sau. người dùng sẽ nhập username và password để gửi lên server, server xác thực username và password đó. Nếu ok thì sẽ trả về token, refresh token (dự kiến như vậy), và expire time. sau đó người dùng dùng token đó để access resource trên server. Về phía client mình có những thắc mắc sau.
- Dùng điều kiện gì để kiểm tra người dùng đã đăng nhập chưa để hiện thị màn hình đăng nhập khi khởi động app. Có phải chỉ cần kiểm tra trong localstorage (đại loại là vậy) có giá trị access token hay không là đủ? Nếu có thì vào thẳng màn hình chính, nếu chưa thì vào màn hình đăng nhập.
- Nếu ở trên dùng access token để kiểm tra đã đăng nhập hay chưa thì làm thế nào để kiểm tra access token đó có hợp lệ hay không. Hợp lệ ở đây nghĩa là token chưa expire. Hay là phải gửi request nào đó để kiểm tra có hợp lệ hay không?
- Vì access token có thời gian expire ngắn nên để ứng dụng sử dụng một cách liên tục không bị gián đoạn và người dùng không phải đăng nhập lại nhiều lần thì làm thế nào để thực hiện như vậy? Mình đang nghĩ tới việc dùng refresh token để lấy lại token mới khi hết hạn. Và lại có nhiều thắc mắc nữa.
3a. Khi nào thì cần lấy lại token mới? trước khi token cũ expire hay sau khi expire?
3b. Làm thế nào để kiểm tra token đó expire hay chưa? Dùng expire time trả về để kiểm tra token đó khi nào hết hạn. Dùng timer hoặc cách gì đó để trước khi expire thì sẽ lấy token mới bằng refresh token rồi cập nhật vào localstorage.
3c. Có phải chỉ cần token chưa expire thì nó luôn luôn có thể truy cập vào server resource không? Nếu user đổi mật khẩu hay thay đổi gì đó ở thiết bị khác thì token này có còn hợp lệ không. Cái này mình chưa hiểu rõ lắm về token.
3d. Làm thế nào để tránh trường hợp người dùng đang mở ứng dụng mà token bị hết hạn dẫn để bị lỗi.
Những ứng dụng như Facebook, Zalo… chắc cũng dùng access token để xác thực? Vậy làm thế nào họ có thể duy trì ứng dụng đăng nhập một cách lâu như vậy?
Xin lỗi mình dùng tiếng Anh tiếng Việt lẫn lỗn. Cảm ơn ạ.