0

たった2回のログイン試行の失敗が私のメールボックスにヒットしました。データを見ると、問題がすぐに見つかりました。Facebookは、メールアドレスの代わりに11桁の数字をOmniauth-Controllerに送信しています。したがって、ユーザーモデルは、移行ファイルの列に電子メール制約を使用して作成されているため、保存できません。そのような場合にデータをどのように処理すればよいか、誰かが考えていますか?ユーザーが不正な形式のメールアドレスを持っているかどうかはあまり気にしないので、理論的には列を通常の文字列などに変更するだけで済みます。より良い解決策はありますか?

ボーナスの質問:

  • facebook + omniauth + devise環境で信頼できないことがわかっている他のフィールドはありますか?
  • google_oauth2プラグインで信頼できないことがわかっているフィールドはあり ますか?
4

2 に答える 2

1

以下のような機能を使用していると思います...

def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
  user = User.where(:provider => auth.provider, :uid => auth.uid).first
  unless user
    user = User.create(name:auth.extra.raw_info.name,
                       provider:auth.provider,
                       uid:auth.uid,
                       email:auth.info.email,
                       password:Devise.friendly_token[0,20]
                       )
  end
  user
end

auth.info.emailが正しいパラメータにマッピングされていますか?

編集:

上記はすべて問題ないので。2つのオプションは、言うように制約を削除するか、文字列を独自にチェックするか、@などが含まれていることです。渡されたデータが正しい形式でない場合は、ダミーのメールアドレスを挿入できます。

于 2012-07-17T15:50:46.857 に答える
0

これは私がそれを素早くそして汚く解決した方法です:

# facebook can send malformed/invalid email
email = auth[:info][:email]
unless email =~ /^(|(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6})$/i
email = "#{Time.now.to_i}@MALFORMED_EMAIL.com"
于 2012-07-17T22:28:56.993 に答える