2012-05-13 3 views
1

Я использую плагин проверки jQuery для проверки с помощью remote: "/valid_password.json", чтобы проверить на сервере, если представленный пароль является правильным. Проблема в том, что на сервере пароль зашифрован (с использованием Authlogic), поэтому, когда я сравниваю параметр пароля с сохраненным паролем, они не совпадают. Как я могу проверить пароль с помощью плагина 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 

Edit: После поиска и чтения, я попытался это: (до сих пор не имели успеха)

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 методы дают разные Результаты. Я думаю, что я должен использовать сохраненный пароль_salt для правильного шифрования, но я не знаю, как это сделать. Первоначально я использовал неправильный параметр для «username», но теперь это исправлено.

+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