Yêu cầu thg 12 21, 2018 9:51 SA 291 0 1
  • 291 0 1
+2

Lỗi gem bcrypt

Chia sẻ
  • 291 0 1

HI mọi người,

Hiện mình có sử dụng gem bcrypt để lưu và mã hóa mật khẩu. Mọi việc diễn ra đều bình thường thì nay mình có vô tình quên truyền tham số password_confirmation, nhưng record vẫn được lưu vào database.

Nếu truyền password_confirmation có nội dung khác với params password thì chương trình không thể lưu record đó. Nhưng nếu không truyền luôn field password_confirmation mà chỉ truyền mình field password thì chương trình save data bình thường. 😐 mình không hiểu được đây là lý do vì sao, mong mọi người gợi ý giúp mình. mình xin cảm ơn.

thg 12 21, 2018 9:51 SA

bạn có thể show code phần đó ra được không ?

Avatar Thanh Nguyen @adamhoang308
thg 12 21, 2018 9:57 SA

@HuyDQ đây bạn ơi 😐 mình dùng chỉ cơ bản như này thôi

  1. trong controler users:
@user = User.new user_params

@user.save

      def user_params
        params.permit(
          :first_name,
          :last_name,
          :email,
          :password,
          :password_confirmation,
          :picture,
          :username
        )
      end
  1. trong model user:
has_secure_password
Avatar Huu Hung @huuhung96
thg 12 21, 2018 11:42 SA

Bạn thử restart lại sever coi sao. Nếu không thì bạn post cái lỗi nó báo trong trường hợp này lên mình xem thử: "Nếu truyền password_confirmation có nội dung khác với params password thì chương trình không thể lưu record đó". Không thể lưu là có báo lỗi gì ở giao diện không? Nếu không có ở giao diện thì ở console Terminal chắc chắn có đó.

thg 12 23, 2018 2:16 CH

"password_confirmation có nội dung khác với params password thì chương trình không thể lưu record đó" ủa mình không hiểu password với password confirm khác nhau vì sau bạn muốn lưu lẽ ra phải báo lỗi "confirmation password do not match" chứ bạn bạn in error messages ra xem có lỗi validate đó ở trong đó không

Avatar Thanh Nguyen @adamhoang308
thg 12 24, 2018 3:38 SA

@namdp06 À cái này là lỗi diễn đạt của mình, issue của mình đơn giản như này thôi:

Mình code api, nên mình dùng postman để test. Và khi đó thì nếu mình không gửi field password_confirmation thì chương trình vẫn work bình thường(nó không bắt lỗi thiếu field password_confirmation).

1 CÂU TRẢ LỜI


Đã trả lời thg 12 24, 2018 5:28 SA
Đã được chấp nhận
+2

password_confirmation là option attribute, không bắt buộc, nên nếu params bạn gửi lên có trường password_confirmation thì sẽ gọi đến validate và tất nhiên phải match với trường password và ngược lại trong trường hợp không cần nhập password_confirmation thì có thể bỏ qua, record vẫn save bình thường. Chi tiết bạn có thể tham khảo: https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

Chia sẻ
Avatar Thanh Nguyen @adamhoang308
thg 12 24, 2018 9:23 SA

oh, thanks bạn nhiều, mình đã hiểu được vấn đề, cảm ơn bạn 😄

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí