2010-10-21 50 views
3

如何在郵件視圖中自定義由Devise生成的默認行?在Devise中自定義confirmation_url

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

我在我的控制器中寫了一個名爲user_confirm的方法。我也爲它定義了一條路線。我可以通過令牌獲得鏈接到該方法的URL作爲參數嗎?

回答

7

我用這個路由:

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 
+0

我應該做哪些改變,如果我希望用戶被重定向到生產HTTPS? – 2014-02-22 07:14:05

+0

我現在發送的鏈接是http,並且用戶也獲取他的令牌,但由於該應用託管在https上,因此它無法識別令牌: – 2014-02-22 07:15:00

+0

設計3更新:設計現在使用一個較短的標記,然後在比較數據庫之前進行散列。您的郵件鏈接應該如下所示:'link_to'確認我的帳戶',confirmation_url(@resource,confirmation_token:@token)' – steakchaser 2014-12-30 19:07:27

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> 
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) %> 

爲Rails 3

+0

謝謝!有效! – 2012-10-15 13:04:22

+0

這似乎是比接受的更好的答案,除非我誤解。這個與Rails 3.2一起工作。 注意:''devise/confirmations#show'明確表示使用默認的設計確認控制器。如果您有自定義確認控制器,請改用'confirmations#show',否則會出現意外的行爲。 – John 2013-08-20 01:34:20

2
  • rails 4.0.5
  • devise 3.2.4

網址:

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> 

網址:

http://example.com/confirm/Kezap1iutgvXyQAhyu64 
0

定製色器件URL將用戶表的不UDPATE 'confirmed_at' 欄,你可以做的是點擊確認鏈接後,將用戶重定向:

步驟1 覆蓋您的confirmations_controller中的after_confirmation_path_for:

創建app/controllers目錄新confirmations_controller.rb:

class ConfirmationsController < Devise::ConfirmationsController 
    private 
    def after_confirmation_path_for(resource_name, resource) 
    your_new_after_confirmation_path 
end 
end 

STEP 2在配置/ routes.rb中,加入這一行,這樣設計會使用自定義ConfirmationsController。這假定Devise在用戶表上運行(您可以編輯以匹配您的用戶)。

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

STEP 3重新啓動Web服務器

相關問題