Неявное создание пользователя с помощью Authlogic и Authlogic OAuth plugin
Я пытаюсь написать простое приложение для пользователей OAuth в Rails. Я использую Authlogic для обработки аутентификации и плагина Authlogic OAuth, чтобы сделать это.
Плагин oauth предоставляет пару помощников для отображения кнопки входа: oauth_login_button и oauth_register_button. Вместе с логикой Authlogic и фильтрами плагина эти две кнопки каким-то образом создают сеанс/пользователь.
Далее будет следующее:
- если я использую вспомогательный помощник oauth_login_button, тогда объект сеанса не может быть сохранен, так как такого пользователя нет локально.
- если я использую помощник oauth_register_button, то при каждом входе в систему после первого Rails жалуется, что маркер уже принят... это означает, что он не может создать вторую копию для того же пользователя, что и правильно.
Проблема в том, что я не хочу иметь кнопки BOTH Register AND Login на моем сайте.
На стороне пользователя, что я хочу достичь, это единственная кнопка на стартовой странице, говоря что-то. например "Войти в Twitter", который пользователь должен щелкнуть, чтобы перейти на внутренние страницы сайта.
На стороне сервера я хочу неявно создать локальную учетную запись пользователя, если пользователь впервые посетил мой сайт.
Любые подсказки о том, как это сделать?
Все образцы Authlogic + OAuth, которые я смог найти, по-видимому, не заботятся о том, что у вас есть только одна кнопка для входа.: (
Ответы
Ответ 1
Похоже, я сам отвечу на вопрос.
Я использую следующий код для создания кнопки входа (в HAML):
- form_tag({:controller => "users", :action => "create"}, {:method => "post"}) do
= oauth_register_button :value => "Sign In with Twitter"
а затем я просто создаю объект сеанса пользователя в методе create класса UserController, если пользователь уже существует:
def create
@user = User.new(params[:user])
@user.save do |result| # LINE A
if result
flash[:notice] = "Account registered!"
redirect_to some_inner_path
else
unless @user.oauth_token.nil?
@user = User.find_by_oauth_token(@user.oauth_token)
unless @user.nil?
UserSession.create(@user)
flash.now[:message] = "Welcome back!"
redirect_to some_inner_path
else
redirect_back_or_default root_path
end
else
redirect_back_or_default root_path
end
end
end
end
Если пользователь является посетителем в первый раз, то пользовательский объект успешно сохраняется в LINE A. И если он отсутствует и есть доступный токен oauth, мы пытаемся извлечь пользователя из базы данных и записать его/ее в.