В разработке, если я изменяю пароль пользователя и после того, как он будет обновлен в db, сайт немедленно выйдет из системы. Я не хочу этого поведения - как это сделать. пожалуйста, помогите.
Автоматически выходить из системы после смены пароля
Ответ 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)
.
Ответ 7
Используйте регистрируемый модуль, который даст вам возможность зарегистрироваться и отредактировать пользовательские функции.
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password