1

我使用 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 来正确加密,但我不知道怎么做。最初我为“用户名”使用了错误的参数,但现在已修复。

4

1 回答 1

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
于 2012-05-14T11:34:32.323 回答