18

私はdevise 2.0とgem omniauth-twitterを使用しています

問題は、Twitter が応答として電子メールを送信しないため、アプリケーションのモデル ユーザーが電子メールがあることを検証すると、コールバックで次のエラーが発生することです。

Email can't be blank

私はuser.rbモデルにこれを持っています:

#config omniauth twitter
def self.find_for_twitter_oauth(access_token, signed_in_resource = nil)
    data = access_token.extra.raw_info
    if user = User.where(:username => data.screen_name).first
        user
    else
        User.create!(:username => data.screen_name, :password => Devise.friendly_token)
    end
end

これはomniauth_callbacks_controller.rbにあります

  def twitter
    @user = User.find_for_twitter_oauth(request.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
      # http://stackoverflow.com/questions/7117200/devise-for-twitter-cookie-overflow-error
      session["devise.twitter_data"] = request.env["omniauth.auth"].except('extra')
      redirect_to new_user_registration_url
    end
   end

ニュースレター、広告主などを送信するためのメールアドレスをユーザーに提供するように強制したい

この問題を解決するにはどうすればよいですか?

ありがとうございました!

4

4 に答える 4

29

これを User モデルに追加します。

def email_required?
  super && provider.blank?
end

パスワードには同等の方法を使用できます。

def password_required?
  super && provider.blank?
end

これは、Omniauth プロバイダーを使用する場合のフィールド要件をオーバーライドする必要があります。

于 2012-12-12T20:55:25.943 に答える
2

ここで解決策が完全に説明されています: http://asciicasts.com/episodes/236-omniauth-part-2

そして GitHub: https://github.com/fertapric/rails3-mongoid-devise-omniauth/wiki/How-To:-Retrieve-email-information-(middle-step)-from-providers-like-Twitter-or -LinkedIn

何らかの理由で、この質問はこれらのリンクよりも Google のランキングで上位に表示されるので、回答に追加することにしました。

于 2013-01-21T15:19:37.540 に答える
2

私は同じ問題に直面しています.Twitterはoauth経由でメールを提供しません.メールを取得するには別の方法を考える必要があります. 私が見つけた唯一の解決策は、コールバックをオーバーライドし、Twitter データを使用してフォームをオートコンプリートし、ユーザーが自分でメールを完成させ、サインアップしてユーザーをデータベースに保存する機会を与えることです。

次の質問を見てください。

OAuth を使用して Twitter の ID を確認した後、ユーザーのメール ID を取得する方法はありますか?

于 2012-05-03T13:49:42.773 に答える
0

メールフィールドのプレゼンス検証を削除する必要があります。この投稿に従って、それが機能するかどうかを確認してください。返信が遅れて申し訳ありませんが、これがお役に立てば幸いです。

于 2012-05-01T06:14:25.600 に答える