Подтвердить что ты не робот

Автоматически выходить из системы после смены пароля

В разработке, если я изменяю пароль пользователя и после того, как он будет обновлен в db, сайт немедленно выйдет из системы. Я не хочу этого поведения - как это сделать. пожалуйста, помогите.

4b9b3361

Ответ 1

У меня была такая же проблема, и следующий код, похоже, работает для меня.

Предположим, что контроллер паролей задан для одноточечного маршрута. Кроме того, предположим, что аутентифицированная модель является учетной записью. При этом у вас есть следующее:

def update
  if current_account.update_with_password(params[:account])
    sign_in(current_account, :bypass => true)
    flash[:notice] = 'Password updated.'
    redirect_to account_path
  else
    render :action => :show
  end
end

Ключевым компонентом является вызов метода sign_in, который пытается повторно зарегистрировать учетную запись, но обходит обратные вызовы начальника и сохраняет учетную запись в сеансе.

Ответ 2

Приведенный выше пример не работал у меня, используя несколько областей в Devise.

Мне пришлось добавить имя области/ресурса в пути sign_in для его работы, а также для предотвращения хаоса мне также пришлось выписать старого пользователя, иначе всевозможные путаницы будут изобиловать.

Изменения, которые я должен был сделать, выглядят примерно так, используя приведенный выше пример.

def update
   if current_account.update_with_password(params[:account])
     sign_out(current_account)
     sign_in(:account, current_account, :bypass => true)
     flash[:notice] = 'Password updated.'
     redirect_to account_path
   else
     render :action => :show
   end
end

Изменить для добавления: я считаю, что мне пришлось принудительно выписать пользователя, потому что где-то я перепробовал код разработки, чтобы пользователи не выходили во время определенных действий. Задним числом; не хорошая идея! Этот подход намного лучше! Быть, что безопаснее создавать свои собственные контроллеры или отменять код разработки, если это не будет абсолютно неизбежным.

Ответ 3

Используйте этот код, чтобы избежать выхода.

sign_in(current_user, :bypass => true)

Ответ 4

Добавьте следующий код в свой метод, в котором вы обновляете пароль пользователя, сразу после обновления пароля пользователя в базе данных:

def update
 . . . . .<your code>
 . . . . .<your code>

 sign_in(@user, :bypass => true)

 . . . . .<your code>
 . . . . .<your code>
end

Ответ 5

Вы можете просто установить sign_in_after_reset_password в devise.rb

config.sign_in_after_reset_password = true

Ответ 6

По некоторым причинам current_user не равно @user, хотя current_user.id равно @user.id. Поэтому я должен использовать sign_in(@user, :bypass => true).