Use Token in advance login

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 .

  1. 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