2009-06-23 3 views
1

Есть простой способ Authlogic (не нашло ничего просмотра the docs), чтобы гарантировать, что UserSession не может быть создана, если пользователь уже имеет объект UserSession ?Authlogic: заверив, что пользователь не может войти дважды

Другими словами: Я хочу, чтобы пользователь не мог войти в систему дважды с теми же учетными данными.

ОБНОВЛЕНИЕ: ознакомьтесь с комментариями к ответу вора, чтобы найти решение этой проблемы.

ответ

3

в контроллере сеансов пользователя:

before_filter :require_no_user, :only => [:new, :create] 

в контроллере приложения:

def require_no_user 
    if current_user 
    store_location 
    flash[:notice] = "You must be logged out to access this page" 
    redirect_to account_url 
    return false 
    end 
end 
+1

Кроме того, вероятно, лучше всего спрятать ссылки для входа, когда кто-то вошёл в систему. –

+0

@thief: Не могли бы вы уточнить? Я не понимаю, как это приведет к тому, что X войдет в систему как Алиса на клиенте B, а Y уже зарегистрирован как Алиса на клиенте A. – Javier

+1

Я неправильно понял ваш вопрос. В этом случае обратный вызов - это путь. например: в вашем UserSessionModel используется обратный вызов 'before_persisting', чтобы проверить, зарегистрирована ли учетная запись на другом компьютере с использованием метода AuthLogic 'logged_in?' - http://authlogic.rubyforge.org/classes/Authlogic/ActsAsAuthentic/LoggedInStatus/Methods/InstanceMethods.html :: – jcoffey

0

На мой взгляд, более чистый подход заключается в использовании функции обратного вызова в классе UserSession. Например, вы можете определить обратный вызов before_create там и пометить модель как недействительную в соответствующем случае. Однако я этого не пробовал. Вот the docs for the Callbacks module.

+0

Да, но вы можете использовать свой метод require_no_user везде, где требуется, чтобы пользователь не вошел в систему, также он хорошо сочетается с его противоположностью: require_user – jcoffey

+0

Согласен. Здесь ничего не добавить. –