Интеграция Devise с Twitter - PullRequest
       2

Интеграция Devise с Twitter

0 голосов
/ 20 августа 2011

В настоящее время я использую это руководство , чтобы попытаться интегрировать Twitter в Devise.

Это немного сложно, потому что OAuth в твиттере не предоставляет адреса электронной почты. Следовательно, порядок регистрации должен быть:

  1. Пользователь нажимает кнопку «Войти через твиттер»
  2. Oauth, перезвоните на твиттер-звонок
  3. Попросить пользователя для электронной почты (мне это нужно для моего сайта)
  4. Войти в систему.

Я понял, что если у пользователя уже есть учетная запись в моей системе с Twitter, я должен быть в состоянии найти учетную запись. Поэтому я добавил 2 дополнительных поля в пользовательскую модель: oauth_provider, oauth_uid .

В omniauth_callbacks_controller:

def twitter @user = User.find_for_twitter_oauth (env ["omniauth.auth"], current_user)

if @user.persisted?
  flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter"
  sign_in_and_redirect @user, :event => :authentication
else
  flash[:warn] = "We still need a little more info!"
  redirect_to new_user_registration_url
end

конец

In user.rb

  # The trick here is that twitter does not give you an email back
  # So we should make use of uid and provider
  def self.find_for_twitter_oauth(oauth_hash, signed_in_resource=nil)
    uid = oauth_hash['uid']
    if user = User.find_by_oauth_provider_and_oauth_uid('twitter', uid)
      user
    else 
      User.create(:password => Devise.friendly_token[0,20],
                  :oauth_provider => "twitter", 
                  :oauth_uid => oauth_hash['uid'])
    end
  end

Однако я тщательно отладил это и понял, что если я перенаправлю пользователя на new_registration_url, то пользователь, созданный в user.rb, будет стерт.

Как мне сделать следующее:

  1. Если пользователь не может быть найден через oauth_provider и oauth_uid, создайте объект User с этими учетными данными
  2. прямой пользователь new_registration_url
  3. Когда пользователь отправит свою электронную почту, создайте пользователя с тем же объектом пользователя, созданным в 1)

Я пытался использовать сессию, но она становится очень грязной, так как мне приходится обезьяна исправлять новинки devise и создавать для registrationscontroller.rb.

Пожалуйста, кто-нибудь, предоставьте мне способ сделать это.

Я пока не добился успеха. Позвольте мне показать вам, что я написал.

1 Ответ

0 голосов
/ 20 августа 2011

Я следил за этими 2 скринкастами, и это именно то, что вы хотите.

Вы можете попробовать!Он использует камень омниаут, который очень прост и удивителен: -)

http://railscasts.com/episodes/235-omniauth-part-1

http://railscasts.com/episodes/236-omniauth-part-2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...