Current_user не запускается правильно

Я знаю, что было много подобных вопросов по этой теме, но ни один из ответов не относится.

Я решил последовать совету Майкла Хартла и реализовать свой собственный код аутентификации вместо того, чтобы использовать предопределенный пакет. Но я сталкиваюсь с проблемой с его решением из Railstutorial.

Я дважды / трижды проверил свой код непосредственно с помощью учебного кода в github, насколько я понимаю, я правильно его реализую, но у меня есть большие проблемы.

Current_user не запускается правильно

хелперы / sessions_helpers.rb

    ...
    def current_user=(user)
      @current_user = user
    end

    def current_user
      #this line of code will change in the tutorial section 9 but its okay for now 
      @current_user ||= User.find_by_remember_token(cookies[:remember_token])

    end

    def signed_in?
      !current_user.nil?
    end

Любой код с использованием помощников в представлениях <% if signed_in? %> всегда возвращает false, даже если аутентификация сработала. И любая попытка доступа к данным с помощью пользовательских методов, таких как current_user.first_name.capitalize потерпеть неудачу с undefined method ``first_name' for nil:NilClass

Пожалуйста, обратите внимание, что это все еще раздел 8 в руководстве (пока не в разделе 9, я действительно не хочу добавлять больше кода в эту ситуацию аутентификации, когда основы не работают. Спасибо за помощь...

2 ответа

Решение

Похоже, что некоторые юнит-тесты помогут сузить фокус и выделить, какие части работают нормально, а какие нет. Или, если хотите, начните с интеграционных тестов. Описание, которое вы дали, звучит так, будто вы тестируете через браузер и, возможно, просматриваете логи.

Я думаю, вы обнаружите, что написание тестов по ходу дела стоит времени. Кроме того, вам будет легче увидеть, если вы позже сломаете что-то, что раньше работало.

Сначала замените "User.find_by_remember_token(cookies[: запомнить_token]) " на что-то действительное, чтобы убедиться, что ваши звонки работают.

Кроме того, все ваши методы являются методами сеанса, поэтому их можно использовать только в контроллере сеанса.

Если вы хотите, чтобы они были доступны во всех представлениях, поместите методы в application_helper.rb.

Другие вопросы по тегам