我最近创建了一种更改当前用户密码的方法,但是在保存记录后,我的UserSession.find返回nil,我尝试编写UserSession.new({...})。保存没有运气,任何建议如何解决这个问题?
这是我的代码,通知是通过AJAX请求运行的(这是UserSessionController下的方法):
DEF
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 :(得分:3)
确保未将maintain_sessions参数设置为false,即:
acts_as_authentic do |c|
c.maintain_sessions = false # change this to true.
end
或强>
保存后手动更新会话:
user.send(:update_sessions)
或强>
保存后重新创建会话:
UserSession.create(user)
答案 1 :(得分:0)
实际上我没有找到解决这个问题的方法:我在更改密码后再次强制登录解决了问题(甚至添加了安全性,所以没那么糟糕)。
我觉得KandadaBoggu对他的答案是正确的,但我测试了所有这些并且他们不适合我。
也许这是我的代码中出错的问题,我真的不知道。 目前我只是将其视为解决方案,因为它实际上适用于我的软件。
如果找到更好的答案,我很乐意将其标记出来。
感谢大家。