إرجاع UserSession.find بعد تغيير كلمة المرور

لقد قمت مؤخرًا بإنشاء طريقة لتغيير كلمة مرور المستخدم الحالية ، ولكن بعد حفظ السجل ، يقوم UserSession.find بإرجاع قيمة nil ، وقد حاولت كتابة UserSession.new ({...}). دون حفظ ، أي اقتراح حول كيفية لحل هذه المشكلة؟

إليك الكود ، ملاحظة يتم تشغيلها من خلال طلب 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
@ KaiKönig: عذرًا ، لم أحصل على هذا: ألا سجِّل سجِل نموذج المستخدم الخاص بي؟ حفظ يعود فعلا صحيح ، لذلك يجب تغيير البيانات على قاعدة البيانات (ولدخول/خروج لاحق ، يتم تغيير كلمة المرور في الواقع). أي اقتراح حول كيفية تجديد جلسة بلدي بطريقة أو بأخرى؟
وأضاف المؤلف Fire-Dragon-DoL, مصدر
KandadaBoggu: عبر طلبات AJAX 2 إلى نفس المسار (change_my_password). في المرة الأولى التي أسميها فإنه يعود ser ، وهي المرة الثانية التي يعيد فيها nil: \ (فقط إذا قمت بتغيير كلمة المرور بالفعل ، وإلا فإنه موافق). لاحظ أنني قمت بتحديث التعليمات البرمجية.
وأضاف المؤلف Fire-Dragon-DoL, مصدر
متى لا تعود UserSession.find إلى الصفر؟ في المكالمات اللاحقة؟
وأضاف المؤلف Harish Shetty, مصدر
record.save فقط ترجع true أو false لتوضيح ما إذا كان السجل مستمرًا أم لا. وبناءً على ذلك ، لن تحتفظ user_session بسجلك الذي تم إنشاؤه حديثًا.
وأضاف المؤلف krichard, مصدر

2 إجابة

في الواقع لم أجد حلا لهذه المشكلة: أنا حلها عن طريق فرض تسجيل الدخول مرة أخرى بعد تغيير كلمة المرور (حتى يتم إضافة الأمان ، لذلك ليس بهذا السوء).

أعتقد أن KandadaBoggu محق في إجابته ، لكنني اختبرت جميعهم وهم لا يعملون معي.

ربما تكون مشكلة تم إنشاؤها بواسطة خطأ ما في الكود ، فأنا لا أعرف حقًا. في هذه اللحظة ، أعتبر هذا الحل هو أنه يعمل بالفعل على برنامجي.

إذا تم العثور على إجابة أفضل ، سأكون سعيدًا بوضع علامة عليها.

الشكر للجميع.

0
وأضاف

تأكد من عدم تعيين maintain_sessions parameter to false ، ie:

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.send (: update_sessions) نفس الموقف مع maintain_sessions بشكل صريح مضبوط على true (في إعدادي لم يتم تعيينه عادة) ، المستخدم لا شيء حتى في المكالمة الأولى ، dunno why. أتصور أنني في حالة سيئة:
وأضاف المؤلف Fire-Dragon-DoL, مصدر
حاول بهذه الطريقة ، انها لا تعمل. لاحظ أن أول تسجيل دخولي يحدث من خلال AJAX ، ربما هذا يمكن أن يخلق نوعا من المشكلة؟
وأضاف المؤلف Fire-Dragon-DoL, مصدر
انظر إلى هذه الإجابة للحصول على تلميحات: stackoverflow.com/a/4075733/163203
وأضاف المؤلف Harish Shetty, مصدر
لا أعتقد أنه مرتبط بـ AJAX نظرًا لأن AJAX هو طلب HTTP عادي. يجب عليك تصحيح هذا في جانب العميل. حاول أيضًا تقديم طلب منتظم بعد reset_password . اطبع كائن الجلسة قبل وبعد إعادة الضبط وفي المكالمة الجديدة.
وأضاف المؤلف Harish Shetty, مصدر