2011-11-23 56 views
0

我向用戶添加了一個名爲activated的屬性。如果它是0,我想阻止登錄,如果它是1,我想允許它。我推翻了設備會話控制器是這樣如何設置設備以防止未激活的用戶登錄

def create 
    resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") 

    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    if resource.activated == 0 
    redirect_to root_path 
    return 
    end 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
end 

和我的路線是這樣的

devise_for :users, :controllers => {:registrations => 'registrations', :sessions => 'sessions'} do 
    get "https://stackoverflow.com/users/sign_out" => "devise/sessions#destroy", :as => :destroy_user_session 
end 

爲何仍允許登錄與激活= 0(IM假設該用戶是函數稱爲登錄。)

+0

你應該爲'activated'字段使用一個布爾值,它會更加直觀。 –

+0

@DevinM真的,但它已經是int(我認爲在應用程序之前將一個字段分配爲一個布爾值,並且因爲布爾不是一個類型而出現錯誤...我認爲...您如何命名該類型作爲bool) – jack

+0

你想使用'boolean'而不是'bool'類型,參見http://api.rubyonrails.org/classes/ActiveRecord/Migration.html –

回答

1

爲什麼不使用confirmable它將允許您在不編寫自定義代碼的情況下具有相同的功能。 documentation解釋得很好,它應該是有道理的。

可證實負責覈實,如果一個賬戶已經 確認登錄,併發送電子郵件與確認 指令。確認說明在創建記錄後以及由新的 確認指令請求手動請求後發送給用戶電子郵件 。

如果您不想發送電子郵件,那麼有辦法禁用它,您可以編寫自己的方法來確認並啓用帳戶。

+0

我寫了一個自定義的事情來發送電子郵件並激活用戶。我想我可以看看這個,謝謝。 (如果你能看到我的代碼中的問題,請告訴我,所以我不覺得我浪費了很多時間) – jack

+1

只需使用它們提供的代碼,當你不需要做新東西時就沒有意義。另外考慮使用版本控制來回你的項目。我建議使用mercurial或git,這樣可以回滾更改並節省時間。 –

+0

謝謝,我實際上使用git,但我很少做提交 – jack

相關問題