2012-06-21 4 views
0

Недавно я создал способ изменить текущий пароль пользователя, однако после сохранения записи мой UserSession.find возвращает nil, я попытался написать UserSession.new ({...}) .save без везения, какое-либо предложение о том, как решить эту проблему?UserSession.find возвращает nil после смены пароля

Вот мой код, обратите внимание, что запускается через AJAX запроса (это метод под UserSessionController):

Защиту

change_my_password 
    #print "--------------RECORD: #{current_user_session.record.as_json}-------- #{current_user_session.user.as_json}" 
    user = current_user 
    user_email = user.email 
    user_remember_me = user.remember_created_at 
    response = { 
     :success => false, 
     :message_code => Extjs::MessageCodes::ERROR, 
     :message => 'Si è verificato un errore', 
     :total => 0, 
     :root => [] 
    } 
    if user.valid_password?(params[:old_password], true) 
     user.password = params[:new_password] 
     user.password_confirmation = params[:confirm_password] 
     response[:message] = 'La nuova password e la conferma non coincidono o sono troppo brevi' 
     if user.save 
     response[:success] = true 
     response[:message_code] = Extjs::MessageCodes::SUCCESS 
     response[:message] = 'Password modificata con successo' 
     end 
    else 
     response[:message] = 'La password precedente non coincide con quella attualmente in uso' 
    end 

    respond_to do |format| 
     format.extjson { render :json => response } 
    end 
    end 
+0

'record.save' возвращает true или false, чтобы указать, была ли запись сохранена или нет. Следовательно, '@ user_session' не сохранит вашу вновь созданную запись. – krichard

+0

@ KaiKönig: Извините, я этого не понял: не записывает ли запись моей модели пользователя? save фактически возвращает true, поэтому он должен изменить данные в базе данных (и для последующего входа/выхода из системы пароль фактически изменяется). Любое предложение о том, как каким-то образом восстановить мою сессию? –

+0

Когда пользователь 'UserSession.find' возвращает нуль? В последующих звонках? –

ответ

0

На самом деле я не нашел решение этой проблемы: Я решил, снова запустив логин после смены пароля (в котором даже добавлена ​​безопасность, поэтому не так уж плохо).

Я думаю, что KandadaBoggu прав с его ответом, но я проверил их всех, и они не работают на меня.

Возможно, это проблема, созданная чем-то неправильным в моем коде, я действительно не знаю. На данный момент я рассматриваю это как решение, потому что оно действительно работает для моего программного обеспечения.

Если будет найден лучший ответ, я был бы рад отметить его.

Спасибо всем.

3

Убедитесь, что вы не установили параметр maintain_sessions ложь , то есть:

acts_as_authentic do |c| 
    c.maintain_sessions = false # change this to true. 
end 

ИЛИ

Обновление сеанса вручную после сохранения:

user.send(:update_sessions) 

ИЛИ

Воссоздать сессии после сохранения:

UserSession.create(user) 
+0

Я тестирую их, но кажется, что они не решают проблему: UserSession.create Я думаю, что он каким-то образом разрушает мой сеанс, ведь в следующий раз, когда я его вызываю, я получаю user = nil. user.send (: update_sessions) в той же ситуации, и с поддержкой valid_sessions явно установленным значением true (в моей конфигурации обычно не установлен), пользователь равен нулю даже при первом вызове, а не почему. Я думаю, что я в плохой ситуации: \ –

+1

Посмотрите на этот ответ для подсказок: http://stackoverflow.com/a/4075733/163203 –

+0

Пробовал таким образом, он не работает. Обратите внимание, что мой первый логин происходит через AJAX, может быть, это может создать своего рода проблему? –