Я не уверен, какую версию устройства вы используете.Поэтому я объясню свою идею ссылкой на devise 3.2.4
.
В devise
есть модуль, который называется Recoverable
.Вы можете посмотреть на это здесь .В этом модуле вы можете найти метод reset_password_period_valid?
Он выглядит так:
def reset_password_period_valid?
reset_password_sent_at && reset_password_sent_at.utc >= self.class.reset_password_within.ago.utc
end
Вы можете начать с этого метода.Второе - это работа с методами в специальном контроллере, посмотрите на PasswordsController
в devise
.Вы можете посмотреть на это здесь .
Методы, которые вы можете перезаписать или изменить:
# GET /resource/password/edit?reset_password_token=abcdef
def edit
self.resource = resource_class.new
resource.reset_password_token = params[:reset_password_token]
end
# PUT /resource/password
def update
self.resource = resource_class.reset_password_by_token(resource_params)
yield resource if block_given?
if resource.errors.empty?
resource.unlock_access! if unlockable?(resource)
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
set_flash_message(:notice, flash_message) if is_flashing_format?
sign_in(resource_name, resource)
respond_with resource, location: after_resetting_password_path_for(resource)
else
respond_with resource
end
end