Use Token in advance login
Bài đăng này đã không được cập nhật trong 3 năm
Giới thiệu
Như các bạn đã biết hiện nay việc bảo mật cho chương trình cũng như website rất được các kĩ thuật viên cũng như khách hành quan tâm rất nhiều . Hôm nay mình xin chia sẻ việc sử dụng token để gia tăng tính bảo mật sử dụng trong chức năng đăng nhập của rails.
Chuẩn bị
Bước đầu tiên các bạn tạo bảng CSDL như sau :
Với trường remember_digest dùng để lưu trữ giá trị token sau khi được mã hóa thành một mảng băm .
- Trong models user . các bạn khai báo một số hàm như sau
def User.digest(string)
cost = ActiveModel::SecurePassword.mincost ? BCrypt::Engine::MINCOST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
def User.new_token
SecureRandom.urlsafebase64
end
def remember
self.remember_token = User.new_token
updateattribute(:remember_digest, User.digest(remember_token))
end
def authenticated?(remember_token)
BCrypt::Password.new(remember_digest).ispassword?(remember_token)
end
Trong đó hàm User.new_token sẽ tạo ra một chuỗi ngẫu nhiên . Hàm User.digest sẽ sử lý chuỗi truyền vào và trả ra một mảng băm . Hàm remember lưu giá trị mới tạo ra vào trưownfg remember_digest trong database . Hàm authenticated? sẽ kiểm tra chỗi truyền vào so sánh với chuỗi trong trường remember_digest sẽ trả về true nếu 2 chuỗi trùng nhau và ngược lạ sẽ trả về false
Cách hoạt động
Khi xử lý thông tin đăng nhập người dùng thành công . Kiểm tra email đăng nhập cũng như mật khẩu chính xác ta tiến hành lưu thông tin của người đăng nhập và cookies
def remember(user)
user.remember
cookies.permanent.signed[:userid] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
Trong đó user.remember gọi đến hàm remember trong model user . Hàm này sẽ tạo ra một chuỗi đã được mã hóa và lưu nó vào trường remmenber_digest của người đăng nhập . Sau đó tạo ra 2 biến cookies dùng để lưu id và chuỗi remember_token của người đăng nhập .
if user && user.authenticated?(cookies[:remember_token])
login user
Sau khi người dùng xác thực thông tin ta kiểm tra xem mã trong trường remember_digest của người dùng có trùng với mã chúng ta đã lưu trong cookies hay không . Nếu trùng thì không còn gì nữa còn nếu không bạn cứ đẩy kẻ đăng nhập này đi đâu cũng được . hahaha đùa đấy ,thường thì chúng ta sẽ bắt họ đăng nhập lại
Tổng kết
Việc xác nhận thêm biến remember_token sẽ tránh được việc có sự can thiệp vào quá trình đăng nhập của người sử dụng . Tăng độ an toàn cho ứng dụng và bảo vệ cho website của bạn . Cảm ơn bạn đã đọc bài viết này hy vọng nó sẽ giúp được bạn trong việc xây dựng ứng dụng của mình
All rights reserved