비교를 위해 수동으로 암호를 암호화하려고합니다. 나는 this이 내가 전화 할 필요가있는 방법이라고 생각한다. 그러나 Sorcery::Model.encrypt('password')
는 작동하지 않는다?마법의 수동 암호화 암호
나는
비교를 위해 수동으로 암호를 암호화하려고합니다. 나는 this이 내가 전화 할 필요가있는 방법이라고 생각한다. 그러나 Sorcery::Model.encrypt('password')
는 작동하지 않는다?마법의 수동 암호화 암호
나는
NoMethodError: undefined method encrypt for Sorcery::Model:Module
나는 이것에 대한 해결책을 가지고 점점 계속.
가정 소서리는 기본 설정으로되어 있습니다. 뷰에서
: 당신이 필요로하는,def update
@user = User.find(id) # find the user first.
# this is the magic, use the saved crypted_password and salt to authenticate user's password
authenticate = BCrypt::Password.new(@user.crypted_password) == params[:old_password] + @user.salt
if authenticate && @user.update_attributes(params[:user])
... # updated and redirect or whatever.
else
... # fail
end
end
당신이 암호를하여 crypt 다른 방법을 사용하는 경우 :
= form_for @user do |f|
= f.label :old_password
= f.password_field :old_password
= label_tag :old_password
= password_field_tag :old_password
= f.label :password"
= f.password_field :password
= f.label :password_confirmation
= f.password_field :password_confirmation
= f.submit "Submit", class: "button"
그런 다음 컨트롤러에, 당신이 할 수있는 (내가 템플릿 슬림 사용) 적절한 방법으로 마법 선을 바꾸십시오.
도움이 될 수 있습니다.
이전 질문에 모델에 검증을 이동하는 것이 더 좋습니다.
unless BCrypt::Password.new(self.crypted_password_was) == (old_password + self.salt_was)
errors.add(:old_password, 'is wrong')
end
: 그리고 조금 잡았다는 새로운
password
와password_confirmation
속성을 가진 모델을 초기화 할 때 유효성 검사가 같은 것을해야한다, 그래서 그것은 더러운 지나간 행보를 사용하는before_validation
필터의 현재crypted_password
및salt
속성을 업데이트한다는 것입니다 귀하의 질문에 대답하지 않기 때문에 사과드립니다.하지만 인증 프레임 워크를 사용하는 경우 수동으로 암호를 암호화하려고하는 이유는 무엇입니까? 마법을 사용하여 암호 암호화를 전혀 관리하지 않아야합니다. –새 암호 외에 이전 암호 (예 : 원래 암호)를 입력해야하는 암호 기능을 업데이트하고 있으므로 "원래"암호를 해시하여 사용자의 현재 암호와 비교해야합니다 그것들이'User.load_from_reset_password_token (토큰)'대신에 암호가 – Lee
으로 재설정되도록 허용하기 전에 일치하는지 확인 하시겠습니까? –