OmniAuth для Facebook

Я пытаюсь использовать этот эпизод Railscast для аутентификации через твиттер http://railscasts.com/episodes/235-omniauth-part-1

Мне интересно, можно ли использовать omni auth для входа в систему с Facebook?

Кроме того, я хотел использовать селектор HTML OpenID, но в демоверсии нет кнопки facebook, и в их часто задаваемых вопросах предполагается, что у них нет поддержки facebook, однако на странице SO Authenticate действительно отображается facebook в качестве одной из кнопок. Селектор openid, который использует SO, является нестандартным?

3 ответа

Решение

Просто добавьте к вам учетные данные omniauth.rb для Facebook

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'CONSUMER_KEY', 'CONSUMER_SECRET'
end

В вашем сеансе или действии аутентификации (где вы работаете с твиттером) добавьте дополнительную логику для Facebook.

Как уже говорилось в других ответах, если вы хотите использовать omniauth с Facebook, просто следуйте ответу Михаила (вы получите ключ и секрет потребителя, зарегистрировавшись на Facebook). Если вы будете следовать этому шаблону, вы на самом деле будете проходить аутентификацию через facebook через OAuth2, а не через OpenID.

Если вы хотите использовать omniauth с провайдером OpenID, например, с Google, шаблон немного отличается, например:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :openid, ActiveRecordOpenidStore::ActiveRecordStore.new, :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id'
end 

OpenID требует "хранилище" для хранения ассоциаций и одноразовых номеров, которые создаются в процессе аутентификации (в вышеупомянутом случае мы используем хранилище OpenID на основе ActiveRecord). С вышеупомянутой конфигурацией перейдем к следующему URL:

${RAILS_ROOT}/auth/google

Следует запустить процесс аутентификации OpenID против Google. Если вы хотите использовать другого провайдера OpenID для аутентификации, вам нужно будет изменить :name а также :identifier поля соответственно.

URL для входа на Facebook - railsroot/auth/facebook

URL логина для твиттера - railsroot/auth/twitter

в вашем инициализаторе omniauth.rb

require 'openssl'


    OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 

    Rails.application.config.middleware.use OmniAuth::Builder do

     provider :twitter, ' consumerkey ', 'consumer-secret  '
     provider :facebook, 'api-key' ,'api-secret', {:scope=>'publish_stream,offline_access,email'}

    end

используйте свои собственные права доступа к области

Другие вопросы по тегам