Твиттер Oauth Стратегия с Warden + Разработать Gems аутентификации для Ruby - PullRequest
4 голосов
/ 19 мая 2010

Разработайте, гем аутентификации для Ruby на основе Warden (еще один гем авторизации) не поддерживает Twitter Oauth в качестве стратегии аутентификации, НО Warden поддерживает. В Devise есть способ использовать стратегию Warden в Twitter Oauth, но я не могу понять это. Я использую следующий блок в файле конфигурации devise:

  config.warden do |manager|
       manager.oauth(:twitter) do |twitter|
          twitter.consumer_secret = <SECRET>
          twitter.consumer_key  = <KEY>
          twitter.options :site => 'http://twitter.com'
       end
       manager.default_strategies.unshift :twitter_oauth
  end

Но я продолжаю получать всевозможные сообщения об ошибках. Кто-нибудь знает, как заставить это работать? Я предполагаю, что здесь есть чем заняться (настройка новой ссылки / маршрута для общения с Warden, возможно, добавление атрибутов в модель Devise User и т. Д.), Но я не могу понять, что они из себя представляют. Пожалуйста помоги.

Ответы [ 4 ]

4 голосов
/ 08 августа 2010
# Needed gems. Add to your Gemfile if you are using Rails3.  
gem 'devise'
gem 'warden_oauth'

#models/user.rb
devise :token_authenticatable, :oauthable # <-- Must have these

#/config/initializers/devise.rb
require 'warden_oauth'
config.warden do |manager|
  manager.oauth(:twitter) do |twitter|
    twitter.consumer_secret = '<SECRET>'
    twitter.consumer_key  = '<CONSUMER KEY>'
    twitter.options :site => 'http://twitter.com'
  end
  manager.default_strategies(:scope => :user).unshift :twitter_oauth
end

Warden::OAuth.access_token_user_finder(:twitter) do |access_token|
  User.find_or_create_by(:token => access_token.token, :secret => access_token.secret).tap do |user|
    #... 
  end
end

# Link to "Login With Twitter" somewhere in your view
<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter') ) %>
3 голосов
/ 01 декабря 2010

Omniauth делает это легко. Существует Railscast по использованию Omniauth с Devise ( часть 1 , часть 2 ).

0 голосов
/ 24 марта 2011

Попробуйте проверить, определяете ли вы класс или модуль с именем Twitter (вы можете проверить это, запустив скрипт / консоль, а затем набрав Twitter), если вы это сделали, назовите его чем-нибудь несуществующим.

0 голосов
/ 01 октября 2010

Это решение работает . Вам просто нужно убедиться, что вы вызываете защищенное действие при указании: warden_oauth_provider => 'twitter', иначе Rails просто проигнорирует его.

Чтобы использовать пример выше, измените ссылку на:

<%= link_to( "Login With Twitter", user_session_path(:warden_oauth_provider => 'twitter'), :method => :post ) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...