authlogic current_user is nil

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

   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 я проверил наличие Регистрация завершена? (просто проверка значения столбца, который работает нормально), а затем перенаправить пользователя на страницу редактирования пользователя, если регистрация не завершена. Когда я отлаживаю это, я вижу, что пытающаяся запись для объекта @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 
1
задан badnaam 24 August 2010 в 19:11
поделиться

1 ответ

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

helper_method :current_user

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

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

«if result» может не сработать так, как вы ожидаете.

В противном случае проверьте эту @user_session.record вместо current_user, если она по-прежнему пуста, ваша проблема не в current_user.

Мне нужно домой, я зайду позже вечером.

1
ответ дан 2 September 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: