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.