首页 > 解决方案 > 设计 - 在令牌无效的情况下不想打开重置密码页面

问题描述

我正在使用devise gem.

如果设计 forget_password_token无效或已使用,我不想打开重置密码页面(通过我的电子邮件收到) 。

现在默认情况下,它要求我添加新密码和密码确认,然后当我提交时,它说“令牌已过期”

我只想添加在电子邮件中发送的过期设备重置密码链接的概念。

请帮忙!

谢谢

标签: ruby-on-railsrubyruby-on-rails-3ruby-on-rails-4devise

解决方案


我不确定您使用的是什么版本的设计。所以我将通过参考来解释我的想法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

推荐阅读