0

最近、現在のユーザーパスワードを変更する方法を作成しましたが、レコードを保存した後、UserSession.findはnilを返します。運が悪かったので、UserSession.new({...})。saveと書いてみました。この問題を解決しますか?

これが私のコードです。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
4

2 に答える 2

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)
于 2012-06-21T18:48:51.777 に答える
0

実際、この問題の解決策は見つかりませんでした。パスワードを変更した後、再度ログインを強制することで解決しました(whcihはセキュリティが強化されているので、それほど悪くはありません)。

KandadaBogguは彼の答えは正しいと思いますが、私はそれらすべてをテストしましたが、それらは私のために機能していません。

たぶんそれは私のコードの何かが間違っていることによって引き起こされた問題です、私は本当に知りません。現時点では、これが実際に私のソフトウェアで機能しているため、これを解決策と見なしています。

より良い答えが見つかったら、喜んでマークを付けます。

みんなありがとう。

于 2012-06-26T02:17:35.297 に答える