kik*_*ito 6 ruby ruby-on-rails devise
我在rails项目中使用Devise.我想将确认网址传递给第三方.该url由confirmation_url(@resource, confirmation_token: @token)以下Devise Mailer视图中的表达式生成:
我已经找到了Devise的整个源代码,试图找出confirmation_url定义的人或地点,但我找不到任何东西; 它只出现在视图上,因此它必须由某些东西动态生成.
在常规的Rails应用程序中,我可以Rails.application.routes.url_helpers用来生成网址(例如Rails.application.routes.url_helpers.user_path(@user)).
有什么类似我可以用来confirmation_url在邮件程序视图之外调用吗?
好吧,经过一段时间的斗争,我决定阅读这个文件顶部附近的解释:
https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/url_helpers.rb
事实证明,Devise默认生成的内容(至少在我的应用程序中)是路由.confirmation_url是一个帮手,但你仍然可以看到Devise生成的路线:
rake routes | grep confirm
Run Code Online (Sandbox Code Playgroud)
因为我使用的是一个名为Account而不是的模型User,所以这给了我:
account_confirmation POST /accounts/confirmation(.:format) accounts/confirmations#create
new_account_confirmation GET /accounts/confirmation/new(.:format) accounts/confirmations#new
GET /accounts/confirmation(.:format) accounts/confirmations#show
confirm_account PATCH /accounts/confirmation(.:format) accounts/confirmations#update
Run Code Online (Sandbox Code Playgroud)
通过查看生成的电子邮件,我确认电子邮件看起来像这样:
http://myserver.com/accounts/confirm?confirmation_token=xxxx
Run Code Online (Sandbox Code Playgroud)
这是上面列出的第三条路线 - 第二条GET.由于我不知道的原因,rails不会打印类似show的路由的名称,但您可以从顶部的POST中推断出它; 路线命名account_confirmation.所以现在我可以使用rails url helper自己生成url:
Rails.application
.routes.url_helpers
.account_confirmation_url(confirmation_token: account.confirmation_token)
Run Code Online (Sandbox Code Playgroud)
这将返回如上所述的URL.记得替换account的user,或者其他任何你与设计验证.
| 归档时间: |
|
| 查看次数: |
3789 次 |
| 最近记录: |