如何使用authlogic和jQuery Validation插件验证密码?

时间:2012-05-13 20:21:01

标签: jquery ruby-on-rails-3 jquery-plugins authlogic

我使用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”的错误参数,但现在已经修复了。

1 个答案:

答案 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