UserSession.find retorna nulo após alterar a senha

Eu criei recentemente uma maneira de mudar a senha do usuário atual, no entanto, depois de salvar o registro, o meu UserSession.find retorna nulo, eu tentei escrevendo UserSession.new ({...}). Salvar sem sorte, qualquer sugestão sobre como resolver este problema?

Aqui está o meu código, note que é executado através de um pedido AJAX (este é um método sob 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
adicionado editado
Visualizações: 1
@ KaiKönig: Desculpe eu não entendi isso: não é gravar meu registro de modelo de usuário? save, na verdade, retorna true, portanto, deve alterar os dados no banco de dados (e, para o login/logout subsequente, a senha é alterada). Alguma sugestão sobre como regenerar minha sessão de alguma forma?
adicionado o autor Fire-Dragon-DoL, fonte
@KandadaBoggu: Através de 2 solicitações AJAX para a mesma rota (change_my_password). A primeira vez que eu ligo ele retorna o ser, a segunda vez que retorna nil: \ (somente se eu realmente mudar a senha, caso contrário, tudo bem). Observe que atualizei o código.
adicionado o autor Fire-Dragon-DoL, fonte
Quando UserSession.find retorna nil? Em chamadas subseqüentes?
adicionado o autor Harish Shetty, fonte
record.save só retorna verdadeiro ou falso para indicar se o registro foi persistido ou não. Conseqüentemente, @user_session não manterá seu registro recém-criado.
adicionado o autor krichard, fonte

2 Respostas

Na verdade eu não encontrei uma solução para este problema: eu resolvi forçando um login novamente depois de alterar a senha (que é ainda mais segurança, por isso não tão ruim).

Eu acho que KandadaBoggu está certo com a sua resposta, mas eu testei todos eles e eles não estão trabalhando para mim.

Talvez seja um problema criado por algo errado no meu código, eu realmente não sei. No momento, apenas considero isso como a solução porque está realmente funcionando para o meu software.

Se uma resposta melhor for encontrada, eu ficaria feliz em marcá-la.

Obrigado a todos.

0
adicionado
0
adicionado
Eu estou testando-os, mas parece que eles não estão resolvendo o problema: UserSession.create Eu acho que ele destrói minha sessão de alguma forma, na verdade, da próxima vez que eu chamo, eu recebo user = nil. user.send (: update_sessions) mesma situação e com maintain_sessions explicitamente definido como true (na minha configuração não está definida normalmente), o usuário é nulo mesmo na primeira chamada, não sei porquê. Eu imagino que estou em uma situação ruim:
adicionado o autor Fire-Dragon-DoL, fonte
Tentei assim, não está funcionando. Note que o meu primeiro login acontece através do AJAX, talvez isso possa criar algum tipo de problema?
adicionado o autor Fire-Dragon-DoL, fonte
Veja esta resposta para sugestões: stackoverflow.com/a/4075733/163203
adicionado o autor Harish Shetty, fonte
Eu não acho que isso esteja relacionado ao AJAX, já que o AJAX é uma requisição HTTP regular. Você deve depurar isso no lado do cliente. Além disso, tente enviar uma solicitação regular após reset_password . Imprima o objeto da sessão antes e depois da redefinição e na nova chamada.
adicionado o autor Harish Shetty, fonte