如何手动运行rails设计方法edit_password_url?

时间:2013-10-18 18:10:20

标签: ruby-on-rails devise

我们的用户的邮件提供商似乎阻止了我们发送密码重置电子邮件的帐户。

我想从irb运行reset-password-URL,然后手动邮寄。我似乎无法弄清楚如何运行这个东西“edit_password_url”或它存在的地方或它定义的范围。

有关如何在irb中手动为用户生成重置密码网址的任何提示?

3 个答案:

答案 0 :(得分:5)

您可以通过控制台完成一些工作。以下是我如何处理它:

在终端中启动rails控制台:

$rails c

我查看了devise mailer视图,看看它调用了什么来创建重置密码网址:

<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token) %></p>

此代码中的@resource是您的用户,@token是他们的重置密码令牌

通过ID,电子邮件或其他方式查找您的用户。然后找到他们的重置密码令牌:

u = User.find(1)
token = u.reset_password_token

要访问视图,您需要创建一个ActionView :: Base

的实例
view = ActionView::Base.new

然后我尝试访问url帮助器,但设计了抱怨

NoMethodError: undefined method `main_app' for #<ActionView::Base>

所以我必须在控制台中键入一个方法来修复该错误(参见this):

def main_app
  Rails.application.class.routes.url_helpers
end

根据您是否在您所在的rails控制台环境中正确配置了邮件程序,您可能会遇到以下错误:host param未设置。为避免这种情况,您只需拨打_path而不是_url。现在,您可以调用url帮助程序并传递为user和token设置的变量:

edit_password_path(u, :reset_password_token => token)

=> /users/password/edit?reset_password_token=123

简短的回答是,您需要找到他们的reset_password_token并将其附加到此网址:

http://yourdomain.com/users/password/edit?reset_password_token=<password-token-here>

答案 1 :(得分:2)

在Devise 3.3中,我做了以下事情:

$ bin/rails c
> include Devise::Controllers::UrlHelpers

答案 2 :(得分:1)

我最近发现自己处于类似垃圾邮件的状态。

这个片段对我来说非常适合使用rails 4,设计4.3。

它还会发送重置密码电子邮件,但为了简单起见,我认为没问题。

user = User.find(123)

token = user.send_reset_password_instructions

Rails
  .application
  .routes
  .url_helpers
  .edit_user_password_url(user, reset_password_token: token)