Я играл с Райаном Бейтсом http://railscasts.com/episodes/170-openid-with-authlogic источниками в качестве основы.
Поэтому я создал несколько значков для провайдеров OpenID, таких как Google, Yandex, OpenID, и пользователь должен выбрать, какой из них использовать (аналогично тому, как здесь в stackoverflow). Так что все в порядке. Теперь я решаю сделать только один клик для входа или регистрации: когда пользователь нажимает на иконку Authlogic, необходимо создать нового пользователя и аутентифицировать его, или, если пользователь существует, просто аутентифицировать его. Поэтому я привязал изменить логику в User # create:
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
@user.save do |result|
if result
redirect_to root_url
else
@user_session = UserSession.new(:openid_identifier => @user.openid_identifier)
@user_session.save
redirect_to root_url
end
end
end
end
Итак, если пользователь не может быть сохранен, Authlogic попытается аутентифицировать его (конечно, пользователь не может быть сохранен не только, если существует другой пользователь с таким же openid_identifier, но только для примера). Но эти схемы не работают. Ничего не произошло, @user_session.save
ничего не вернуть в этом случае.
Upd
Просмотр Shripad K ссылки источников (http://github.com/shripadk/authlogic_openid_selector_example/blob/master/app/models/user_session.rb) Я поймал это:
class UserSession < Authlogic::Session::Base
auto_register
end
auto_register
это все, что мне нужно