Я не нашел хорошего способа сделать это. Я также не использую :omniauthable
, я использую OmniAuth и Devise по отдельности, как видно из эпизода Railscast, где есть две таблицы users
и authentications
. Это своего рода хакерство и работает только для Facebook.
По сути, отправьте свой access_token с iPhone на сервер через SSL или что-то подобное. Сначала вы должны проверить с OmniAuth, и если вам предоставлен доступ, то вы можете вручную создать сеанс с OmniAuth, выполнив что-то вроде:
Я заставил что-то работать, хотя:
FB = OmniAuth::Strategies::Facebook.new("nothing")
client = ::OAuth2::Client.new("nothing", "nothing", FB.client_options)
cached_token = "app_id_part|session_id_part|token_part" # or maybe you sent it from the iPhone
access_token = ::OAuth2::AccessToken.new(client, cached_token)
FB.instance_variable_set("@access_token", access_token)
FB.auth_hash
# You will either get a hash or get this error:
# OAuth2::AccessDenied: Received HTTP 401 during request.
После этого вы просматриваете информацию о пользователе, которую нужно найти, с помощью таблицы аутентификаций:
@user = Authentication.where(:uid => FB.auth_hash["uid"], :provider => "facebook").first.user
Теперь мы создаем сессию:
sign_in_and_redirect(:user, @user)
# or, perhaps
sign_in(@user, :bypass => true)