OAuth

2012-01-02 21 views
6

का उपयोग कर ट्विटर से पहला नाम/अंतिम नाम/ईमेल प्राप्त करना मैं विशेष रूप से फेसबुक/google/twitter के साथ अपनी वेबसाइट पर लॉगिन की अनुमति देने के लिए omniauth का उपयोग कर रहा हूं।OAuth

मैं पहला नाम, अंतिम नाम और ईमेल स्टोर करता हूं। हालांकि, जब मैं ओथ से ट्विटर लेखक हैश को उठाता हूं तो मुझे केवल हैश नाम, उपनाम, नाम, स्थान, वर्णन और यूआरएल मिल जाता है।

क्या कोई ऐसा गुंजाइश है जो मैं अपने प्रारंभकर्ता में पास कर सकता हूं ताकि उपयोगकर्ता का ईमेल प्राप्त हो सके और first_name, last_name फ़ील्ड में नाम हटा दिया जा सके?

उत्तर

8

ट्विटर ताकि आप ट्विटर एपीआई से कि जानकारी प्राप्त करने के लिए सक्षम नहीं होंगे उपयोगकर्ता ईमेल नहीं देता के लिए एक ही धागा है। इसके बजाए, आपको उपयोगकर्ता को अपने साइन अप फॉर्म पर अपना ईमेल पता टाइप करने के लिए कहा जाना चाहिए।

जहां तक ​​नाम बंटवारे के रूप में, आप है कि एक बार आप हैश की तरह कुछ का उपयोग कर वापस आ कर चाहते हैं:

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

आपको बहुत धन्यवाद। मुझे यकीन नहीं है कि कॉलबैक के बाद ईमेल पते के बारे में पूछने के लिए कैसे संभालना है - मैं रेल के लिए बहुत नया हूं और वर्तमान में सत्र में उपयोगकर्ता इंटरैक्शन के बिना एक झुकाव में इसे क्रिया संभालता है। एसओ के लिए शायद एक और सवाल। – Rapture

+0

दुर्भाग्य से, ट्विटर आपको ईमेल पता नहीं देकर अपनी साइन अप प्रक्रिया में एक अतिरिक्त चरण का उपयोग करने के लिए मजबूर करता है। आपको उपयोगकर्ता को अपने ईमेल पते के लिए एक साइन अप फॉर्म पर रीडायरेक्ट करना होगा या फिर फेसबुक जैसी एक अलग साइन अप सेवा का उपयोग करना होगा, जो ईमेल पता प्रदान करता है यदि आप इसे निर्बाध बनाना चाहते हैं। – iwasrobbed

+0

हाँ - वर्तमान में मैं फेसबुक और Google का उपयोग कर रहा हूं - मैं शायद इस वजह से ट्विटर को छोड़ दूंगा। – Rapture

1

अच्छी तरह से डिजाइन द्वारा ट्विटर आपको ईमेल आईडी का उपयोग नहीं करेगा। यह एपीआई टीम द्वारा जानबूझकर डिजाइन निर्णय है।

यहाँ अपने refrence

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

+0

धन्यवाद - मुझे बेहतर खोजना चाहिए था:/ – Rapture

0

यदि आपके पास एफबी, Google और ट्विटर के साथ एकीकरण है, तो आपको अपने डीबी में पहला और आखिरी होना होगा (यदि आपके यूआई को इसकी आवश्यकता है> मेरा मामला)। (मार्को डी Franca सोलिस) या (मार्को, डी Franca सोलिस)

// + 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) 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: "स्मिथ आप तीन अलग अलग तरीकों से उन के इलाज के लिए चुन सकते हैं "

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

वर्तमान ट्विटर एपीआई का उपयोग संभव ईमेल प्राप्त करना है। आपको उस अनुमति का अनुरोध करने के लिए एक फॉर्म भरना होगा।प्रक्रिया आसान और त्वरित है, इसे here समझाया गया है।

उपयोगकर्ता के ईमेल पते का अनुरोध करने के लिए आपके आवेदन को ट्विटर द्वारा श्वेतसूचीबद्ध करने की आवश्यकता है। पहुंच का अनुरोध करने के लिए, कृपया इस फॉर्म का उपयोग करें।

एक बार श्वेतसूची में, "उपयोगकर्ताओं से ईमेल पते का अनुरोध करें" चेकबॉक्स ऐप्स.twitter.com पर आपकी ऐप अनुमतियों के तहत उपलब्ध होगा। गोपनीयता नीति यूआरएल और सेवा की शर्तें यूआरएल फ़ील्ड भी उन सेटिंग्स के तहत उपलब्ध होंगी जो ईमेल एक्सेस के लिए आवश्यक हैं। यदि सक्षम है, तो उपयोगकर्ताओं को ओथ/अधिकृत संवाद के माध्यम से सूचित किया जाएगा कि आपका ऐप उनके ईमेल पते तक पहुंच सकता है।