Работая с railstutorial.org Майкла Хартла, я нахожусь в главе 8 (в частности, в 8.2.3). Текущая проблема заключается в реализации сеанса, чтобы пользователь оставался в системе в нескольких представлениях, но функциональность, реализованная в этом разделе, должна быть временным сеансом, срок действия которого истекает (выводит пользователя из системы), когда окно браузера закрыто. Вот утверждение из учебника, указывающее на такое:
Если вы полностью закроете свой браузер, вы также сможете убедиться, что приложение забывает ваш статус входа в систему, требуя, чтобы вы снова вошли в систему, чтобы увидеть изменения, описанные выше.
Я протестировал эту функцию как в Google Chrome, так и в Firefox — я успешно вхожу в систему, перехожу к нескольким страницам (чтобы убедиться, что мой сеанс сохраняется после перенаправления log_in), а затем закрываю браузер — но когда я перезагружаю веб-приложение, Я все еще вошел в систему. Я скопировал весь код в точности, как он написан в тексте, но безрезультатно. Для справки, вот мой файл sessions_helper.rb
:
module SessionsHelper
# Logs in the given user.
def log_in(user)
session[:user_id] = user.id
end
# Returns the current logged-in user (if any).
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end
end
А вот и мой файл sessions_controller.rb
(действие destroy
еще не реализовано, так как я не дошел в тексте до того, чтобы придать кнопке Logout какую-либо функциональность):
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
# Log the user in and redirect to the user's show page.
log_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
end
конец
Примечание. Пожалуйста, не в своих ответах добавляйте альтернативный код или изменяйте существующий код (если только вы не видите ошибку в опубликованном мной коде). В учебнике предполагается, что это рабочий код, и для его правильной работы не требуется никаких изменений.