Rails истекает пароль в течение 24 часов - PullRequest
4 голосов
/ 04 октября 2011

В моем приложении rails 3.1 я хочу создать и истечь случайный пароль для пользователей. Для этого я использую gem для разработки. Любой плагин доступен для expiring password с некоторой продолжительностью?
Или, пожалуйста, дайте мне несколько логических советов для реализации этой функции.
Пожалуйста, считайте меня новичком.

Ответы [ 4 ]

4 голосов
/ 04 октября 2011

Похоже, вы просто хотите истечь пароль один раз.Если вы хотите делать это через регулярные промежутки времени (например, каждые пару месяцев) или хотите запретить пользователям повторно использовать пароли, это усложняется.

Взято из приложения, в котором я работаюon:

app / models / user.rb (при условии, что вы так называете свою модель):

def password_should_expire?
  # your logic goes here, remember it should return false after the password has been reset
end

app / controllers / application_controller.rb

before_filter :check_password_expiry
def check_password_expiry
  return if !current_user || ["sessions","passwords"].include?(controller_name)
  # do nothing if not logged in, or viewing an account-related page
  # otherwise you might lock them out completely without being able to change their password
  if current_user.password_should_expire?
    @expiring_user = current_user # save him for later
    @expiring_user.generate_reset_password_token! # this is a devise method
    sign_out(current_user) # log them out and force them to use the reset token to create a new password
    redirect_to edit_password_url(@expiring_user, :reset_password_token => @expiring_user.reset_password_token, :forced_reset => true)
  end
end
4 голосов
/ 04 октября 2011

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

В зависимости от того, какие фреймворки вы используете, эта функциональность (или что-то подобное) может уже существовать в рамках фреймворка или, возможно, как плагин. Если нет, то это не особенно сложно реализовать. Все, что вам нужно, это дополнительный столбец в вашем хранилище данных для хранения даты / времени создания пароля и немного дополнительной логики для создания пароля и его использования.

2 голосов
/ 05 июня 2012

Проверьте гем расширения безопасности Devise:

https://github.com/phatworx/devise_security_extension

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

0 голосов
/ 17 июня 2016

@ Ответ Джерико содержит какой-то старый код, вот правка

В модели / user.rb:

  def password_should_expire?
    if DateTime.now() > password_changed_at + 30.seconds
      return true;
    else
      return false;
    end
  end

В контроллере приложения:

    before_filter :check_password_expiry
    def check_password_expiry
      return if !current_user || ["sessions","passwords"].include?(controller_name)
      # do nothing if not logged in, or viewing an account-related page
      # otherwise you might lock them out completely without being able to change their password
      if current_user.password_should_expire?
        @expiring_user = current_user # save him for later
        @expiring_user.set_reset_password_token! # this is a devise method
        sign_out(current_user) # log them out and force them to use the reset token to create a new password
        redirect_to edit_password_url(@expiring_user, :reset_password_token => @expiring_user.reset_password_token, :forced_reset => true)
      end
    end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...