2010-08-24 34 views
1

我在我的application_controller中有标准的current_user方法。authlogic current_user是无

def current_user_session 
     return @current_user_session if defined? 
(@current_user_session) 
     @current_user_session = UserSession.find 
    end 

    def current_user 
     return @current_user if defined?(@current_user) 
     @current_user = current_user_session && 
current_user_session.record 
    end 

在我UserSessionController创建方法,我查 registration_complete? (简单地检查一列的值,其中 工作正常),然后如果 注册未完成,则将用户重定向到用户编辑页面。当我调试这个时,我可以看到已尝试记录@user_session对象存在,它指向 给正确的用户,但 中的current_user方法的redirect_to edit_user_path(current_user), 始终返回nil。

这里怎么回事?

def create 
     @user_session = UserSession.new(params[:user_session]) 
     # uses a block to prevent double render error... 
     # because oauth and openid use redirects 
     @user_session.save do |result| 
      if result 
       flash[:notice] = "Login successful!" 
       if @user_session.new_registration? 
        logger.info "Session controller : new 
registration" 
        logger.info "Complete - 
#{@user_session.registration_complete?}" 
        flash[:notice] = "Please review profile" 
        redirect_to edit_user_path(current_user) 
       else 
        if @user_session.registration_complete? 
         logger.info "Session Controller - registration 
complete" 
        else 
         flash[:notice] = "Please complete profile" 
         logger.info "Session Controller - registration 
not complete" 
         redirect_to edit_user_path(current_user) 
#current_user nil here 
        end 
       end 
       redirect_to current_user ? profile_url(current_user) : 
login_url 
      else 
       if @user_session.errors.on(:user) 
        # if we set error on the base object, likely it's 
because we didn't find a user 
        render :action => :confirm 
       else 
        render :action => :new 
       end 
      end 
     end 
    end 
+0

如果你还是想回答这个问题...请参阅回答问题http://stackoverflow.com/q/5305306/1188763希望这有助于! – Norto23 2012-04-11 00:05:59

回答

1

我已经看到了这一点,并在我的一个应用程序中使用了相同的身份验证系统。你没有提到它,这就是为什么我向你提出这个建议,如果你有,那么我需要看到更多的application_controller,所以无论如何尝试在方法之前添加它。

helper_method :current_user 

我只是有一个尴尬的时刻,尝试这样做,而不是将块传递给保存方法。

if @user_session.save 
    # rest of your logic here 
end 

“如果结果”可能无法达到您期望的效果。

否则检查此@ user_session.record而不是current_user,如果它仍然为nul您的问题不是current_user。

我需要回家,我会在今晚稍后回来。

+0

感谢您的回复。这是我的appcontroller。我已经有了这个帮手方法。 http://pastie.org/1113118 – badnaam 2010-08-24 19:48:49

+0

好吧,看起来不错,我可以告诉我,如果current_user在@ user_session.new_registration下?验证是不是nul?我试图找出任何错误,我不能,我在想@ user_session.registration_complete?可能会改变@user_session中的内容。否则将current_user存储在另一个变量(如@user)中,然后在重定向中使用它来查看它是否有效。 – Hugo 2010-08-24 20:31:08

+0

其实是current_user在那个创建方法的任何地方工作? – Hugo 2010-08-24 20:33:28

0

尝试使用这rails2:

class ApplicationController < ActionController::Base 
    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details 

    #Authlogic 
    filter_parameter_logging :password 

    helper_method :current_user 

    private 

    def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
    end 
end 

,这对Rails3中:

class ApplicationController < ActionController::Base 
    helper :all # include all helpers, all the time 
    protect_from_forgery # See ActionController::RequestForgeryProtection for details 

    helper_method :current_user 

    private 

    def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
    end 
end 

/config/application.rb

# Configure sensitive parameters which will be filtered from the log file. 
config.filter_parameters += [:password] 
相关问题