Use Token in advance login
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. Bước đầu tiên các bạn tạo bảng CSDL ...
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.
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
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