在Devise中自定义confirmation_url

时间:2010-10-21 10:25:08

标签: ruby-on-rails devise

如何在邮件程序视图中自定义Devise生成的默认行?

<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p>

我在我的控制器中编写了一个名为user_confirm的方法。我也为它定义了一条路线。我可以使用令牌作为参数来获取链接到该方法的URL吗?

5 个答案:

答案 0 :(得分:8)

我使用了这个路由:

map.user_confirm 'confirm/:confirmation_token',
    :controller => 'confirmations', :action => 'show'

这个ERB:

<%= link_to 'Confirm my account',
    user_confirm_url(:confirmation_token => @resource.confirmation_token) %>

得到了这个不错的链接:

http://localhost:3000/confirm/RjOnrd5yNREEDwsEfiFa

答案 1 :(得分:7)

类似于(在routes.rb中):

devise_scope :user do
  match '/confirm/:confirmation_token', :to => "devise/confirmations#show", :as => "user_confirm", :only_path => false
end

在视图中,您可以使用以下内容:

<%= link_to 'Confirm my account', user_confirm_url(@resource.confirmation_token) %>

for Rails 3。

答案 2 :(得分:2)

  • rails 4.0.5
  • devise 3.2.4

<强> URL:

http://example.com/users/confirmation?confirmation_token=jevYKv1z9Pr1LsAUB2NX

应用/视图/设计/邮寄者/ confirmation_instructions.html.erb:

<p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>

之后

<强>配置/ routes.rb中:

devise_scope :user do
    get 'confirm/:confirmation_token', to: 'devise/confirmations#show'
end

应用/视图/设计/邮寄者/ confirmation_instructions.html.erb:

<p><%= link_to 'Confirm my acount', confirm_url(@token) %></p>

<强> URL:

http://example.com/confirm/Kezap1iutgvXyQAhyu64

答案 3 :(得分:0)

知道了。 假设我定义了这样的命名路线。

map.user_confirm '/user_confirm',  :controller => 'users', :action => 'confirm'

我所要做的就是

<p><%= link_to 'Confirm my account', user_confirm_url(confirmation_token => @resource.confirmation_token) %></p>

答案 4 :(得分:0)

自定义设计URL不会udpate用户表的'confirmed_at'列,您可以做的是在点击确认链接后重定向用户:

第1步 覆盖confirmmations_controller中的after_confirmation_path_for:

在app / controllers目录中创建一个新的confirmations_controller.rb:

devise_for :users, controllers: { confirmations: 'confirmations' }

第2步在config / routes.rb中,添加此行,以便Devise将使用您的自定义ConfirmationsController。这假设Devise在用户表上运行(您可以编辑以匹配您的用户)。

{{1}}

第3步重启网络服务器