UserSession.find devuelve nil después de cambiar la contraseña

Recientemente, he creado una forma de cambiar la contraseña actual del usuario; sin embargo, después de guardar el registro, UserSession.find devuelve nil. Intenté escribiendo UserSession.new ({...}). Guardar sin suerte, cualquier sugerencia sobre cómo ¿resolver este problema?

Aquí está mi código, notificación que se ejecuta a través de una solicitud AJAX (este es un método en 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
@ KaiKönig: Lo siento, no lo recibí: ¿no está grabando mi registro de Modelo de Usuario? save realmente devuelve verdadero, por lo que debe cambiar los datos en la base de datos (y para el inicio de sesión/cierre de sesión posterior, la contraseña se cambia de hecho). ¿Alguna sugerencia sobre cómo regenerar mi sesión de alguna manera?
agregado el autor Fire-Dragon-DoL, fuente
@KandadaBoggu: en 2 solicitudes AJAX a la misma ruta (change_my_password). La primera vez que lo llamo, me devuelve el ser, la segunda vez me devuelve nil: \ (solo si realmente cambio la contraseña, de lo contrario está bien). Tenga en cuenta que actualicé el código.
agregado el autor Fire-Dragon-DoL, fuente
¿Cuándo UserSession.find devuelve nil? En llamadas posteriores?
agregado el autor Harish Shetty, fuente
record.save solo devuelve verdadero o falso para indicar si el registro fue persistente o no. En consecuencia, @user_session no mantendrá su registro recién creado.
agregado el autor krichard, fuente

2 Respuestas

En realidad, no encontré una solución a este problema: lo resolví forzando un inicio de sesión nuevamente después de cambiar la contraseña (que incluso es seguridad añadida, por lo que no está tan mal).

Creo que KandadaBoggu está en lo cierto con su respuesta, pero los probé a todos y no están funcionando para mí.

Tal vez es un problema creado por algo mal en mi código, realmente no lo sé. Por el momento solo considero esto como la solución porque realmente está funcionando para mi software.

Si se encuentra una mejor respuesta, me complacería marcarla.

Gracias a todos.

0
agregado

Asegúrese de no haber configurado maintain_sessions parámetro a falso, es decir:

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

O

Actualice la sesión manualmente después de guardar:

user.send(:update_sessions)

O

Recrea la sesión después del guardado:

UserSession.create(user)
0
agregado
Los estoy probando pero parece que no están resolviendo el problema: UserSession.create Creo que destruye mi sesión de alguna manera, de hecho la próxima vez que lo llamo obtengo user = nil. user.send (: update_sessions) misma situación y con maintain_sessions explícitamente establecido en true (en mi configuración no se establece normalmente), el usuario es nulo incluso en la primera llamada, no sé por qué. Me imagino que estoy en una mala situación: \
agregado el autor Fire-Dragon-DoL, fuente
Intento de esa manera, no está funcionando. Tenga en cuenta que mi primer inicio de sesión ocurre a través de AJAX, ¿tal vez esto puede crear una especie de problema?
agregado el autor Fire-Dragon-DoL, fuente
Mire esta respuesta para obtener sugerencias: stackoverflow.com/a/4075733/163203
agregado el autor Harish Shetty, fuente
No creo que esté relacionado con AJAX, ya que AJAX es una solicitud HTTP regular. Debes depurar esto en el lado del cliente. También intente enviar una solicitud normal después de reset_password . Imprima el objeto de sesión antes y después de reiniciar y en la nueva llamada.
agregado el autor Harish Shetty, fuente