如何在邮件程序之外使用 Devise 的“confirmation_url”?
How can I use Devise's `confirmation_url` outside of a mailer?
我在 rails 项目中使用 Devise。我想将确认 url 传递给第三方。 url 由以下 Devise Mailer 视图中的表达式 confirmation_url(@resource, confirmation_token: @token)
生成:
我已经 grep 了 Devise 的整个源代码,试图找出 confirmation_url
定义的人或位置,但我找不到任何东西;它只出现在视图中,因此它必须由某些东西动态生成。
在常规 Rails 应用程序中,我可以使用 Rails.application.routes.url_helpers
生成 url(例如 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
是一个 helper,但你仍然可以看到 routes Devise 生成:
rake routes | grep confirm
因为我使用的是 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
通过查看生成的电子邮件,我确认电子邮件如下所示:
http://myserver.com/accounts/confirm?confirmation_token=xxxx
这是上面列表中的第三条路由 - 第二个 GET。由于我不知道的原因,rails 不会打印类似 show-like 的路由的名称,但您可以从顶部的 POST 推断出来;该路线名为 account_confirmation
。所以现在我可以使用 rails url 帮助程序自己生成 url:
Rails.application
.routes.url_helpers
.account_confirmation_url(confirmation_token: account.confirmation_token)
这将 return 和上面的 url 一样。请记住将 account
替换为 user
或您使用 Devise 进行身份验证的任何其他内容。
我在 rails 项目中使用 Devise。我想将确认 url 传递给第三方。 url 由以下 Devise Mailer 视图中的表达式 confirmation_url(@resource, confirmation_token: @token)
生成:
我已经 grep 了 Devise 的整个源代码,试图找出 confirmation_url
定义的人或位置,但我找不到任何东西;它只出现在视图中,因此它必须由某些东西动态生成。
在常规 Rails 应用程序中,我可以使用 Rails.application.routes.url_helpers
生成 url(例如 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
是一个 helper,但你仍然可以看到 routes Devise 生成:
rake routes | grep confirm
因为我使用的是 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
通过查看生成的电子邮件,我确认电子邮件如下所示:
http://myserver.com/accounts/confirm?confirmation_token=xxxx
这是上面列表中的第三条路由 - 第二个 GET。由于我不知道的原因,rails 不会打印类似 show-like 的路由的名称,但您可以从顶部的 POST 推断出来;该路线名为 account_confirmation
。所以现在我可以使用 rails url 帮助程序自己生成 url:
Rails.application
.routes.url_helpers
.account_confirmation_url(confirmation_token: account.confirmation_token)
这将 return 和上面的 url 一样。请记住将 account
替换为 user
或您使用 Devise 进行身份验证的任何其他内容。