2012-05-13 36 views
1

我使用jQuery Validation插件進行驗證,使用remote: "/valid_password.json"在服務器上檢查提交的密碼是否正確。問題是在服務器上密碼被加密(使用Authlogic),所以當我比較密碼參數和存儲的密碼時,它們是不一樣的。我如何使用JQuery驗證插件驗證密碼?如何使用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來獲得加密權限,但我不知道如何。最初我使用了「用戶名」的錯誤參數,但現在已修復。

+0

你爲什麼不嘗試加密你與AuthLogic發送,然後比較加密版本的密碼? – jmort253

+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