2012-04-15 97 views
0

我正在通過基於Hartl教程的項目進行工作。我已經設置了一個用戶身份驗證模型,主要工作...。用戶可以註冊,但我在sign_in過程中遇到問題。如果用戶註銷,他們無法登錄。我已驗證數據庫正在保存用戶的註冊信息,因此問題在於確認用戶已註冊。我看過我的日誌,但他們沒有幫助。Rails應用程序不會記住用戶並允許重新登錄

這就是我得到:

Started POST "/sessions" for 127.0.0.1 at 2012-04-15 13:56:46 -0500 
    Processing by SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"itOIPKPrXlymcBujKMu4Xjwvs6GlD3jteBQJf+/mYEY=", "session"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}, "commit"=>"Sign in"} 
    User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '[email protected]' LIMIT 1 
    Rendered sessions/new.html.erb within layouts/application (1.6ms) 
    Rendered layouts/_stylesheets.html.erb (2.0ms) 
    User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1 
    CACHE (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1 
    Rendered layouts/_header.html.erb (3.2ms) 
    Rendered layouts/_footer.html.erb (0.3ms) 
    Completed 200 OK in 30ms (Views: 16.1ms | ActiveRecord: 2.6ms) 

但我應該看到的是這一點。

Started POST "/sessions" for 127.0.0.1 at 2012-04-15 12:50:24 -0500 

    Processing by SessionsController#create as HTML 

    Parameters: {"utf8"=>"✓", "authenticity_token"=>"h/M5VYBaG16sGiGHTWo26GJSU1/TlMNFjQd5TN1VZ3Y=", "session"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}, "commit"=>"Sign in"} 

    User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '[email protected]' LIMIT 1 

    User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = '[email protected]' LIMIT 1[0m 

    Redirected to http://localhost:3000/users/103 

    Completed 302 Found in 19ms 

我的問題是: 什麼是去了解故障排除這個問題的最好方法是什麼?
什麼是「明顯」的地方,我應該開始尋找。我正在使用這裏找到的用戶認證代碼,並且我已經在其他項目中成功實現了它。這只是給了我麻煩。 這是我的驗證碼。

module SessionsHelper 

    def sign_in(user) 
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] 
    self.current_user = user 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    @current_user ||= user_from_remember_token 
    end 

    def signed_in? 
    current_user.present? 
    p "user signed_in? method called" 
    p current_user 
    end 

    def sign_out 
    cookies.delete(:remember_token) 
    self.current_user = nil 
    p "user has signed out" #Method does NOT get called 
    end 



    def current_user?(user) 
    user == current_user 
    end 

    def authenticate 
    deny_access unless signed_in? 
    end 

    def deny_access 
    store_location 
    redirect_to signin_path, :notice => "Please sign in to access this page." 
    end 

    def redirect_back_or(default) 
    redirect_to(session[:return_to] || default) 
    clear_return_to 
    end 

    private 

    def user_from_remember_token 
     p "Looking user up from the cookie" 
     User.authenticate_with_salt(*remember_token) 
    end 

    def remember_token 
     cookies.signed[:remember_token] || [nil, nil] 
    end 

    def store_location 
     session[:return_to] = request.fullpath 
    end 

    def clear_return_to 
     session[:return_to] = nil 
    end 
end 

回答

2

你問顯而易見的,所以這裏很明顯......

你可以在行動開始打印出cookie值。

您可以在操作的各個位置引發異常。我喜歡這樣做。它比「p」更可靠,因爲打印可以通過緩衝輸出。我把我打印出來的信息放到字符串中,例外。開發模式也吐出像params這樣有用的信息。

+0

很酷。感謝提出異常的想法。 – 2012-04-15 21:43:38

相關問題