2012-02-01 79 views
0

我有一個rails應用程序,使用devise gem進行用戶身份驗證。即使設置了confirm_within參數,設計用戶也不會登錄

我用可確認發送確認郵件給用戶。它運行良好。我收到確認電子郵件。我需要在成功登錄前確認我的帳戶。

我想讓他們在確認他們的帳戶之前嘗試我們的應用一段時間。所以我在設計初始化器中設置了confirm_within。它失敗了。用戶填寫註冊表格後,他們將在註冊後重定向回登錄頁面。我查了一下日誌,看起來用戶沒有登錄,所以認證失敗!過濾前。

這是我的配置。

型號:user.rb

devise :database_authenticatable, :registerable, :encryptable, 
     :recoverable, :rememberable, :trackable, :validatable, :confirmable 

route.rb

devise_for :users, :controllers => {:password => "passwords"} 

初始化器:devise.rb

config.confirm_within = 2.days 

application_controller.rb

def after_sign_in_path_for(resource) 
     stored_location_for(resource) || jobs_path 
    end 

jobs_controller.rb

class JobsController < ApplicationController 
    before_filter :authenticate_user! 

    ***some functions 
    end 

我不知道我做錯過什麼。有人會好心告訴我如何解決這個問題嗎?謝謝。

+0

你有沒有簽過用戶?您需要撥打'sign_in @ user'才能讓用戶登錄。通常,您在提交登錄表單時對用戶的憑據進行身份驗證後會這樣做... – Batkins 2012-02-01 21:37:29

+0

感謝回覆@Batkins。註冊和確認過程由Devise控制。我使用官方寶石,並沒有改變任何內部。我檢查了源代碼,並似乎設計sign_in用戶註冊#創建已經....任何想法? – 2012-02-02 04:58:06

回答

1

對不起,我不能有更多的幫助,我沒有任何與Devise的confirm_within功能合作的經驗。但是,according to this question,看起來用戶在註冊後應該註銷,因爲他們不應該在登錄後才能通過回覆電子郵件來確認他們的電子郵件地址,如果我沒有弄錯的話。如果您希望他們在註冊後自動登錄,那麼我相信您需要刪除confirm_within選項。在我看來,confirm_within選項是用戶爲確認他們註冊的電子郵件地址實際上是他們的電子郵件地址(通過單擊通過電子郵件發送給他們的鏈接)的時間。

+0

根據設計文件。 config_within是讓用戶無需確認帳戶即可登錄的參數。非常感謝你的幫助。 :) – 2012-02-04 09:13:33

+0

@Batkins是對的。 – Magne 2015-01-28 12:22:15

1

我想你讀錯文檔: 「* + allow_unconfirmed_access_for +:你要允許用戶確認之前,訪問他的帳戶 #在此之後,用戶訪問被拒絕的時候,你可以 #用這個來讓你的用戶訪問你的應用程序的某些功能,而不需要 #確認帳號,但是在一段時間後(即7天)阻止它。 #默認情況下,allow_unconfirmed_access_for爲零,這意味着用戶總是要確認簽名in。 #* +重新確認+:需要確認任何電子郵件變更(與 #初始確認帳號完全相同)需要額外的unconfirmed_ema il #要設置的db字段(在遷移中爲t.reconfirmable)。直到確認新電子郵件是 #存儲在未經確認的電子郵件列中,並複製到成功的 #確認郵件列。 #* + confirm_within +:發送的確認令牌變爲無效之前的時間。 #你可以使用它來強制用戶在設定的時間內確認。「

在這裏

https://github.com/plataformatec/devise/blob/master/lib/devise/models/confirmable.rb

所以允許用戶無需確認登錄你必須定義一個特定的時間:

config.allow_unconfirmed_access_for

,並允許用戶確認,這在他無法再確認之後,這意味着他需要爲該電子郵件發送新的確認信息,因爲令牌變得無效:

config.confirm_within

希望它是明確的。

+0

其實config.confirm_within是config.allow_unconfirmed_access_for的舊名稱,對不起,我沒有看到這篇文章有多大 – 2013-03-12 14:19:23

相關問題