2012-01-02 11 views
6

私はfacebook/google/twitterで自分のウェブサイトへのログインを許可するためにomniauthを排他的に使用しています。OAuthを使用してTwitterから名/姓/メールを取得する

私は名前、姓、電子メールを保存します。しかし、私がoauthからtwitter認証ハッシュを上げると、認証ハッシュのニックネーム、名前、位置、画像、説明、およびURLのみが取得されます。

私のイニシャライザで渡すことのできるスコープは、ユーザーの電子メールを取得し、名前をfirst_name、last_nameフィールドに区切りますか?

答えて

8

Twitterに同じスレッドです。代わりに、ユーザーにサインアップフォームにメールアドレスを入力するように依頼する必要があります。

social_params ||= request.env["omniauth.auth"] 
fullname = social_params["user_info"]["name"].split(' ') 
first_name, last_name = fullname[0], fullname[1] 
puts "first name is #{first_name} and last name is #{last_name}" 

ちょうど彼らが持っていない場合last_namenil可能性があることに注意してください:限り名前を分割として、あなたはハッシュのようなものを使用して戻ってきたら、それを行うだろう

彼らの名前のスペースまたは彼らは姓を与えていない。これはまた、多くの人々が他の文化の中で複数の苗字を持つという事実を考慮していない。

+0

ありがとうございます。私はコールバックの後でメールアドレスを尋ねるのをどう扱うかについてはあまりよく分かりません.-私はかなりレールに慣れていませんし、現在はセッション作成アクションを持っています。おそらくSOの別の質問です。 – Rapture

+0

残念ながら、Twitterでは、電子メールアドレスを提示しないことで、登録手続きに1つの追加ステップを使用するよう強制されます。あなたは自分のメールアドレスを尋ねるサインアップフォームにユーザをリダイレクトするか、シームレスにしたい場合はメールアドレスを提供するFacebookのような別のサインアップサービスを使用する必要があります。 – iwasrobbed

+0

ええ - 現在私はFacebookとGoogleを使用しています - これでTwitterが落ちてしまうでしょう。 – Rapture

1

よくTwitterのデザインであなたは電子メールIDを使用して渡されません。これは、APIチームによる意図的なデザイン決定です。

は、ここでは、TwitterのAPIからその情報を取得することができなくなりますので、ユーザーの電子メールを与えるものではありませんあなたのrefrence

Is there a way to get an user's email ID after verifying her Twitter identity using OAuth?

+0

ありがとうございます - 私はよく検索してください:/ – Rapture

0

FB、Google、Twitterと統合している場合は、DBに最初から最後まで(UIに必要な場合)>必要があります。 (マルコ・デ・フランカソリス)または(マルコ・デ・フランカソリス)

// + TEST CASES 
var name1 = handleName("Marco De Franca Solis") 
var name2 = handleName("first,last wer wer") 
var name3 = handleName("aName") 
var name4 = handleName("") 
// - TEST CASES 

handleName = function(input) { 
    var n=input.indexOf(" "); 
    n += input.indexOf(","); 
    var result = {}; 
    if(n < 0){ 
     result.first = input 
     result.last = "" 
    } 
    else{ 
     arr = input.split(/[ ,]+/); 
     result.first = arr[0] 
     result.last = "" 
     if(arr.length > 1) 
     { 
      arr[0] = "" 
      result.last = arr.join(" "); 

     } 
    } 

    return result 
} 
0

OmniAuthがあなたに与えているすべての名前:これは私がいくつかの国は、その名前の元のための2つの以上のトークンを持つ人々を持っているように思い付いたものです1つの文字列で結合されます。しかし、 "John Clark Smith"のように2語以上の名前を持つ人もいます。

(1)FIRST_NAME: "ジョン"、LAST_NAME: "スミス"

def first_name 
    if name.split.count > 1 
     name.split.first 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

(2)FIRST_NAME: "ジョン・クラーク"、LAST_NAME:「スミスは次の3つの異なる方法でそれらを処理するために選択することができます「

def first_name 
    if name.split.count > 1 
     name.split[0..-2].join(' ') 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

は(3)FIRST_NAME: "ジョン"、LAST_NAME: "クラーク・スミス"

def first_name 
    name.split.first 
    end 

    def last_name 
    if name.split.count > 1 
     name.split[1..-1].join(' ') 
    end 
    end 

は、上記の例は、もし名前を想定2語未満の単語を含む場合、それは名字です。この質問は、PHPの使用のためにthis one

0

のようになります。

$names = explode(' ',$socialData->firstName); 
$socialData->firstName=array_shift($names); 
$socialData->lastName=implode(' ',$names); 

は名前が複数の姓と場合によっては複数のfirstnamesを持っている可能性があり注意してください、これは複数の姓ではなくfirstnamesを扱っています。

2

現在のTwitter APIを使用すると可能です。メールを受け取ります。その許可を要求するフォームに記入する必要があります。このプロセスは簡単で素早く、hereと説明されています。

ユーザーの電子メールアドレスを要求すると、アプリケーションがTwitterによってホワイトリストに登録されている必要があります。アクセスをリクエストするには、このフォームを使用してください。

ホワイトリストに登録されると、「ユーザーからのメールアドレスの要求」チェックボックスが、apps.twitter.comのアプリケーション権限で利用可能になります。プライバシーポリシーのURLおよび利用規約のURLフィールドは、電子メールアクセスに必要な設定でも利用できます。有効にすると、oauth/authorizeダイアログを介して、アプリが自分のメールアドレスにアクセスできることが通知されます。

関連する問題