我们有一个用户,其邮件提供商似乎阻止了我们发送密码重置电子邮件的帐户。
我只想从 irb 获取 reset-password-URL,然后手动邮寄。我似乎无法弄清楚如何运行这个东西“edit_password_url”或它的位置或它定义的范围。
关于如何在 irb 中手动为用户生成重置密码 url 的任何提示?
我们有一个用户,其邮件提供商似乎阻止了我们发送密码重置电子邮件的帐户。
我只想从 irb 获取 reset-password-URL,然后手动邮寄。我似乎无法弄清楚如何运行这个东西“edit_password_url”或它的位置或它定义的范围。
关于如何在 irb 中手动为用户生成重置密码 url 的任何提示?
您可以通过控制台完成一些工作。这是我的处理方法:
在终端中启动 rails 控制台:
$rails c
我查看了设计邮件程序视图,看看它调用了什么来创建重置密码 URL:
<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>
所以我不得不在控制台中输入一个方法来修复这个错误(见这个):
def main_app
Rails.application.class.routes.url_helpers
end
根据您是否在您所在的 rails 控制台环境中正确配置了您的邮件程序,您可能会收到一些关于 :host 参数未设置的错误。为避免这种情况,您可以只调用_path
而不是_url
. 现在您可以调用 url 助手并传递您为用户和令牌设置的变量:
edit_password_path(u, :reset_password_token => token)
=> /users/password/edit?reset_password_token=123
简短的回答是您需要找到他们的 reset_password_token 并将其附加到此 URL:
http://yourdomain.com/users/password/edit?reset_password_token=<password-token-here>
在设计 3.3 中,我执行了以下操作:
$ bin/rails c
> include Devise::Controllers::UrlHelpers
我最近发现自己处于类似的垃圾邮件文件夹情况。
这个片段对我来说很好用 rails 4, devise 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)