2010-07-09 40 views
0

這是從我的登錄頁面代碼:我在哪裏得到一個NoMethodError使用平靜的授權?

<%= flash[:notice]%> 
<h1>System</h1>    
<%= Time.now%></p> 
<p><%=link_to "Register", signup_path%></p> 
<div id="login"> 
    <%if logged_in? %>  
     <b><%=current_user.login%></b> 
     <%=link_to "Signout", logout_path%> 
    <%else%> 
     <% form_remote_tag :url => session_path do -%> 
     <p><%= label_tag 'login' %> 
     <%= text_field_tag 'login', @login %> <%= label_tag 'password' %> 
     <%= password_field_tag 'password', nil %></p> 

     <p><%= label_tag 'remember_me', 'Remember me' %> 
     <%= check_box_tag 'remember_me', '1', @remember_me %></p> 
     <p><%= submit_tag 'Log in' %></p> 
     <% end -%>   
    <%end%> 
</div>  

這是sessions_controller.rb:

# This controller handles the login/logout function of the site. 
class SessionsController < ApplicationController 
    # Be sure to include AuthenticationSystem in Application Controller instead 
    #include AuthenticatedSystem 

    # render new.rhtml 
    def new 
    end 

    def create 
    logout_keeping_session! 
    user = User.authenticate(params[:login], params[:password]) 
    if user 
     # Protects against session fixation attacks, causes request forgery 
     # protection if user resubmits an earlier form using back 
     # button. Uncomment if you understand the tradeoffs. 
     # reset_session 
     self.current_user = user 
     new_cookie_flag = (params[:remember_me] == "1") 
     handle_remember_cookie! new_cookie_flag 
     #redirect_back_or_default('/') 
     flash[:notice] = "Logged in successfully" 
     self.reload_login() 
    else 
     note_failed_signin 
     @login  = params[:login] 
     @remember_me = params[:remember_me] 
     render :action => 'new' 
    end 
    end 

    def destroy 
    logout_killing_session! 
    flash[:notice] = "You have been logged out." 
    redirect_back_or_default('/') 
    end  

    def reload_login 
    respond_to {|format| format.js} 
    flash[:notice] = "What the hell?" 

    end 

protected 
    # Track failed login attempts 
    def note_failed_signin 
    flash[:error] = "Couldn't log you in as '#{params[:login]}'" 
    logger.warn "Failed login for '#{params[:login]}' from #{request.remote_ip} at #{Time.now.utc}" 
    end 
end 

我可以登錄的頁面,但在我等了一會,幾分鐘後,我發現我的系統#指標差得NoMethodError ...

undefined method `remember_token?' for true:TrueClass 
Extracted source (around line #6): 

3: <%= Time.now%></p> 
4: <p><%=link_to "Register", signup_path%></p> 
5: <div id="login"> 
6: <%if logged_in? %>  
7:  <b><%=current_user.login%></b> 
8:  <%=link_to "Signout", logout_path%> 
9: <%else%> 

我不知道發生了什麼事情錯了,它工作在首次發射。但是如果我再次登錄「http://localhost:3000/login」,錯誤消失了,發生了什麼?謝謝你。

回答

0

你看過數據庫遷移嗎?請檢查您的表中是否有屬性remember_token,以及它的類型是否爲bool。

4

打開authenticated_system.rb並在下面一行改變and&&(這是128對我):

user = !cookies[:auth_token].blank? and User.find_by_remember_token(cookies[:auth_token]) 

這是一個常見的錯誤互換& &

p true and false # returns true 
p true && false # returns false, this is the conventional behaviour 
相關問題