我使用jQuery Validation插件进行验证,使用remote: "/valid_password.json"
检查服务器上提交的密码是否正确。问题是在服务器上密码是加密的(使用Authlogic),因此当我将密码参数与存储的密码进行比较时,它们是不一样的。如何使用JQuery Validation插件验证密码?
以下是控制器中的代码:
def valid_password
username = params[:user_session][:username]
password = params[:user_session][:password]
@user = User.find_by_username(username)
if @user.password == password
@password_ok = true
end
respond_to do |format|
format.json { render :json => @password_ok ? "true" : "false"}
end
end
编辑:搜索和阅读后,我尝试过这个:(仍然没有成功)
def valid_password
username = params[:username]
password = params[:user_session][:password]
@user = User.find_by_username(username)
puts "TEST" + @user.crypted_password
@password = Authlogic::CryptoProviders::Sha512.encrypt(password)
puts "TEST" + @password
if @password == @user.crypted_password
@password_ok = true
end
respond_to do |format|
format.json { render :json => @password_ok ? "true" : "false"}
end
end
两种puts
方法会产生不同的结果。我想我应该使用存储的password_salt来获得正确的加密,但我不知道如何。最初我使用了“username”的错误参数,但现在已经修复了。
答案 0 :(得分:3)
现在有效!
我必须在加密之前将password_salt添加到密码:
def valid_password
username = params[:username]
password = params[:user_session][:password]
@user = User.find_by_username(username)
password = "#{password}#{@user.password_salt}"
@password = Authlogic::CryptoProviders::Sha512.encrypt(password)
if @password == @user.crypted_password
@password_ok = true
end
respond_to do |format|
format.json { render :json => @password_ok ? "true" : "false"}
end
end