Я храню всю информацию о сеансе в базе данных. Пользователь может войти в систему, чтобы что-то сделать. Есть некоторые зоны ограниченного доступа, требующие входа пользователя. Если пользователь попытается достичь этой области до входа в систему, система перенаправит его на страницу входа.
Иногда пользователь может закрыть браузер без выхода из системы. Если это произойдет, в следующий раз, когда он попытается войти в систему, система не сможет распознать вновь созданный сеанс, даже если пользователь ввел правильное имя пользователя и пароль. Затем система снова принудительно выполнит вход пользователя.
Кто-нибудь знает, как это исправить? Я попытался сбросить сеанс с помощью reset_session
перед загрузкой страницы входа. Проблема не может быть решена.
Контроллер сеанса
def new
end
def create
session[:current_account] = Account.authenticate(params[:email], params[:password])
if session[:current_account]
redirect_to :controller => "xxxxx", :action => "index"
else
flash[:notice] = "Please try again."
render :action => 'new'
end
end
Модель учетной записи
def self.authenticate(email, pass)
account = find_by_email(email)
account && account.authenticated?(pass) ? account : nil
end
def authenticated?(pass)
encrypted_password == Account.encrypt(pass,salt)
end
Контроллер Xxxxx
before_filter :permission_handling
def index
end
Контроллер приложений
def permission_handling
unless logged_in?
forced_login
end
end
def logged_in?
session[:current_account].is_a?(Account)
end
def forced_login
flash[:notice] = "You haven't login yet!"
redirect_to ( :controller => "sessions", :action => "new" )
end
Спасибо всем. :)