2010-08-24 2 views
1

У меня есть стандартные методы current_user в моем application_controller.authlogic current_user is no

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? (просто проверка на значение столбца, который отлично работает), а затем перенаправить пользователя на страницу редактирования пользователя, если регистрация не завершена. Когда я отлаживаю это, я вижу, что существует tryed_record для объекта @user_session, и он указывает правильному пользователю, но метод current_user в redirect_to edit_user_path (current_user), всегда возвращает ноль.

Что здесь не так?

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

ответ

1

Я видел это и использовал эту самую систему аутентификации в одном из моих приложений. Вы не упомянули об этом, и именно поэтому я предлагаю вам это, если у вас есть, тогда мне нужно будет увидеть больше вашего приложения_контроллера, поэтому в любом случае попробуйте добавить это до методов.

helper_method :current_user 

У меня просто был момент, попробуйте сделать это вместо передачи блока методу сохранения.

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

«если результат» может не делать то, что вы ожидаете от него.

Else проверьте этот @ user_session.record вместо current_user, если он все еще nul, ваша проблема не current_user.

Мне нужно вернуться домой, я вернусь позже сегодня вечером.

+0

Спасибо за ответ. Вот мой appcontroller. У меня уже есть этот вспомогательный метод. http://pastie.org/1113118 – badnaam

+0

Хорошо, мне все хорошо, можете ли вы сказать мне, является ли current_user под именем @ user_session.new_registration? проверка не является нулем? Я пытаюсь придраться к чему-либо, и я не могу, я думаю @ user_session.registration_complete? может изменить то, что находится внутри @user_session. В противном случае сохраните current_user внутри другой переменной, такой как @user, затем используйте это в своем перенаправлении, чтобы увидеть, работает ли оно. – Hugo

+0

Действительно ли current_user работает в любом месте этого метода создания? – Hugo

1

У меня был подобный вопрос с authlogic и рельсов 3, и проблема, что я понял, был аутентификации Apache HTTP, который был включен в моем сервере производства, вот решение, чтобы получить, что фиксировано, проверьте Rails + Authlogic @current_user problem - "Show" method no longer works

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] 
Смежные вопросы