Мне нужна помощь по чему-то, что должно быть очень простым. Я следовал отличному учебнику по тому, как заставить Rails 3 и Authlogic работать вместе. Это та же самая базовая оболочка аутентификации, на которую ссылаются во многих местах. Но я просто не могу заставить работать функцию выхода из системы. Я провел дни, пробуя разные вещи. Так что мне нужна помощь. Может быть, это просто что-то, что я не правильно понимаю, но вот проблема:
Суть: @ user_session.destroy не завершает сеанс.
Подробнее:
Я работаю над веб-службой, поэтому я взаимодействую только с запросами в формате .xml ... и для проверки использую cURL.
Все отлично работает, кроме моей основной проблемы. Я заполняю базу данных пользователями.
когда я делаю следующее без входа в систему, и cookie.txt пуст (или является файлом cookie другого пользователя) ->
curl -v -H "Accept: text/xml" -X GET --cookie cookies.txt http://localhost:3000/user.xml
мой запрос отклонен (без сеанса), как ожидалось
Когда я вхожу, используя это ->
curl -v -H "Accept: text/xml" -X POST -d 'user_session[email]=eric@xyz.com&user_session[password]=secret' --cookie-jar cookies.txt http://localhost:3000/user_session.xml
Создается новый сеанс, и я могу сделать предварительный GET для моего сердца. Все работает правильно в том смысле, что при использовании файлов cookie других пользователей не работает, при отсутствии файлов cookie не работает и т. Д.
НО ... когда я выхожу ... делаю это ->
curl -v -H "Accept: text/xml" -X DELETE --cookie cookies.txt http://localhost:3000/user_session.xml
Действие UserSessionsController # destroy называется
def destroy
@user_session = UserSession.find
@user_session.destroy
respond_to do |format|
format.html { redirect_to(:users, :notice => 'Goodbye!') }
format.xml { head :ok }
end
end
и строки в действии - @user_session = UserSession.find и
@ user_session.destroy выполнены. Нет ошибок и тестирование @user_session = UserSession.find сразу после уничтожения выдает ноль, как и ожидалось
ОДНАКО ... при следующем запросе GET, если этот же файл cookie, срок действия которого должен истечь, передается в запросе, происходит тот же поиск в базе данных идентификатора этого конкретного пользователя и информация доставляется - как если бы сеанс продолжал существовать! !
Я знаю, что это основные вещи, но для полноты вот мой ApplicationController:
class ApplicationController < ActionController::Base
#protect_from_forgery
helper_method :current_user_session, :current_user
private
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
def require_user
unless current_user
respond_to do |format|
format.xml { head :unauthorized }
end
return false
end
end
def require_no_user
if current_user
respond_to do |format|
format.xml { head :bad_request }
end
return false
end
end
@ user_session = UserSession.find в current_user_session - создает пользователя, вышедшего из системы, и будет продолжать это делать ... навсегда, если будет предоставлен исходный файл cookie, созданный при входе.
Я не могу прекратить сеанс, что бы я ни пытался. Я даже углубился в отключение кеширования ActiveRecord, поскольку видел, как происходили попадания в кеш. Кеширование отключено и ничего не изменилось. Я полагаю, что это грубая ошибка понимания с моей стороны или что-то с Authlogic, я не понимаю или не работает.
Есть мысли ??