1

remote: "/valid_password.json"送信されたパスワードが正しいものであるかどうかをサーバーで確認するために使用する検証には、jQuery Validation プラグインを使用します。問題は、サーバー上でパスワードが (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

2 つのputs方法では、異なる結果が得られます。暗号化を正しく行うには、保存されている password_salt を使用する必要があると思いますが、方法がわかりません。もともと「username」に間違ったパラメーターを使用していましたが、現在は修正されています。

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 に答える