gpt4 book ai didi

ruby-on-rails - 我如何在邮件程序之外使用 Devise 的 `confirmation_url`?

转载 作者:数据小太阳 更新时间:2023-10-29 07:04:38 24 4
gpt4 key购买 nike

我在 Rails 项目中使用 Devise。我想将确认网址传递给第三方。该 url 由以下 Devise Mailer View 中的表达式 confirmation_url(@resource, confirmation_token: @token) 生成:

https://github.com/plataformatec/devise/blob/master/app/views/devise/mailer/confirmation_instructions.html.erb

我已经 grep 了 Devise 的整个源代码,试图找出 confirmation_url 定义的人或位置,但我找不到任何东西;它只出现在 View 中,因此它必须由某些东西动态生成。

在常规 Rails 应用程序中,我可以使用 Rails.application.routes.url_helpers 生成 url(例如 Rails.application.routes.url_helpers.user_path(@user)).

有没有类似的东西可以用来在邮件 View 之外调用 confirmation_url

最佳答案

好吧,在与它抗争了一段时间之后,我决定阅读该文件顶部附近的解释:

https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/url_helpers.rb

事实证明,Devise 默认生成的(至少在我的应用程序中)是路由。 confirmation_url 是一个帮助程序,但您仍然可以看到 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

这是上面 list 中的第三条路线——第二条 GET。由于我不知道的原因,rails 不会打印类似 show-like 的路线的名称,但您可以从顶部的 POST 中推断出来;该路由名为 account_confirmation。所以现在我可以使用 rails url helper 自己生成 url:

Rails.application
.routes.url_helpers
.account_confirmation_url(confirmation_token: account.confirmation_token)

这将返回一个像上面那样的 url。请记住将 account 替换为 user,或者您使用 Devise 进行身份验证的任何其他内容。

关于ruby-on-rails - 我如何在邮件程序之外使用 Devise 的 `confirmation_url`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com