2010-07-13 13 views
5

मुझे भ्रमित हो रहा है।... के साथ एक जीमेल पता प्राप्त ... openid? OAuth?

मैं LightOpenID का उपयोग करके ओपनिड लॉगिन थोड़े काम करने में सक्षम था।

मैं बस इतना कर रहा हूं कि यह सिर्फ openid_identity है जैसे कि "https://www.google.com/accounts/o8/id?id=xxx"। बहुत निराशाजनक: मैं ईमेल पता भी प्राप्त करने की उम्मीद कर रहा था।

अर्थात मैं लॉगइन करने के लिए (कि क्या openid करता है) और पता करने के लिए खाते में गूगल के ईमेल पते के लिए लॉग इन करने के लिए इस्तेमाल उपयोगकर्ता की जरूरत है।

समारोह $openid->getAttributes() नहीं है, लेकिन सब मुझे लगता है कि से प्राप्त सिर्फ एक खाली सरणी है: मुझे लगता है कि गूगल मुझे उस openid_identity से कुछ और देने के लिए नहीं जा रहा है।

तो मैं अनुमान मुझे OAuth का उपयोग करना चाहिए, है ना? मैं इसके बारे में अनजान हूं। मैं केवल भयानक और उलझन प्रलेखन पाया है, कि या तो सब कुछ समझाने का दिखावा (और मैं मतलब सब कुछ कर ), या यह सब पर कुछ भीसमझाने में विफल रहता है।

हां, ज़ाहिर है कि मैंने इसके बारे में पिछली पोस्टों को देखने की कोशिश की है, जैसा कि मैंने Google पर खोज की थी। कृपया उपरोक्त पैराग्राफ को फिर से पढ़ें।

+0

कृपया मेरे प्रश्न (यहां आपके लिए उपयोगी हो सकता है) पर एक नज़र डालें: http://stackoverflow.com/questions/2667447/how-to-use-the-correct-google-openid-url-to-login -to-my-site तो मूल रूप से जहां तक ​​मुझे पता है, जीमेल पर ओपनआईडी के लिए यह तरीका है, आप अपने ओपनआईडी –

+0

धन्यवाद के हिस्से के रूप में अपने जीमेल पते को स्पष्ट रूप से नहीं प्राप्त कर सकते हैं। यदि ऐसा है तो हम प्रश्न के दूसरे भाग पर वापस आ गए हैं: 'OAuthWTF'? –

उत्तर

10

मैंने अभी पाया है लाइट ओपेनिड और मुझे लगता है कि यह अद्भुत है।

<?php 

require_once('openid.php'); 

if (empty($_GET['openid_mode'])) 
{ 
    if (isset($_GET['login'])) 
    { 
     $openid = new LightOpenID(); 
     $openid->identity = 'https://www.google.com/accounts/o8/id'; 
     $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language'); 

     header('Location: ' . $openid->authUrl()); 
     //header('Location: ' . str_replace('&amp;', '&', $openid->authUrl())); 
    } 

    else 
    { 
     echo '<form action="?login" method="post">' . "\n"; 
     echo '<button>Login with Google</button>' . "\n"; 
     echo '</form>' . "\n"; 
    } 
} 

else if ($_GET['openid_mode'] == 'cancel') 
{ 
    echo 'User has canceled authentication!'; 
} 

else 
{ 
    $openid = new LightOpenID(); 

    echo 'User ' . ($openid->validate() ? $_GET['openid_identity'] . ' has ' : 'has not ') . 'logged in.'; 

    echo '<pre>'; 
    print_r($openid->getAttributes()); 
    echo '</pre>'; 
} 

?> 

मैं इसे एक छोटे से अधिक पठनीय बनाने के लिए कोड बदल गया है, उत्पादन:: मैं example-gmail.php के निम्नलिखित संशोधन का उपयोग कर ई-मेल पता, प्रथम और अंतिम नाम और पसंदीदा भाषा पाने के लिए प्रबंधित किया है

User https://www.google.com/accounts/o8/id?id=*** has logged in. 

Array 
(
    [namePerson/first] => Alix 
    [contact/email] => ***@gmail.com 
    [pref/language] => en 
    [namePerson/last] => Axel 
) 

मुझे अभी भी डाक कोड और अन्य Google से नहीं मिल सकते हैं, लेकिन मुझे myOpenID.com के साथ सफलता मिली है।

+0

धन्यवाद, लेकिन मेरा सवाल है: 'आवश्यक' विशेषताओं की सूची कहां से पूछ सकती है? मुझे केवल 'openix.ax.wtf' की सूची मिल सकती है, लेकिन मुझे नहीं पता कि LightOpenID में उनका उपयोग कैसे करें ...:/ –

+0

ओह, यहां यह है -> http://www.axschema.org/प्रकार/... अभी भी, Google से पूछने का कोई तरीका है कि इनमें से कौन सा फ़ील्ड निर्यात करने जा रहा है? या बस उन सभी को आजमाएं और कुछ काम करेंगे जबकि कुछ नहीं करेंगे? –

+0

क्या LightOpenID आपके द्वारा किए गए अनुरोध को 'if (iss है ($ _ GET [' login ']) में जमा करता है)? ऐसा प्रतीत नहीं होता है, फिर भी इसे (प्रदर्शन कारणों से) चाहिए। Google के मामले में, यह उदासीन है, लेकिन ऐसा नहीं हो सकता है कि उपयोगकर्ता द्वारा आपूर्ति किए गए पहचानकर्ता (यूएसआई) दावा किए गए पहचानकर्ता (सीआई) हैं। मान लें कि आप myusername.myopenid.com दर्ज करें। उस यूआरएल के लिए खोज चरण में, आप पाते हैं कि एंडपॉइंट यूआरएल जो उस पहचानकर्ता के लिए अधिकृत रूप से प्रतिक्रिया देता है। यदि आप उस जानकारी को सहेजते नहीं हैं, तो दूसरे चरण में आपको फिर से जांच करनी होगी यदि एंडपॉइंट के पास सीआई पर अधिकार है। – Artefacto

1

Google खाता होने का मतलब यह नहीं है कि आपको एक जीमेल खाता मिलता है। You can start a Google account with any email address

यह कहकर कि मुझे पहचान के हिस्से के रूप में ईमेल पते या लॉगिन डेटा वापस करने के लिए spec का हिस्सा नहीं लगता है।

+1

अच्छा बिंदु। मैं * वह * ईमेल पता प्राप्त करना चाहता हूं, इससे कोई फर्क नहीं पड़ता कि यह जीमेल नहीं है। –

1

ओएथ और ओपनआईडी समान नहीं हैं। वे पूरी तरह से अलग चीजों को हल करते हैं। मैं आपके द्वारा चेक की गई धारणा के तहत जा रहा हूं: Federated Login for Google Account Users इसमें Google खाते के लिए खाते कैसे काम करते हैं, इस बारे में थोड़ा और स्पष्टीकरण है।

समाधान:

  1. This is in Python but you should be able to adjust it accordingly for PHP.
  2. This is in .Net - again you should be able to change the AX mode yourself.
5

आप OpenID के गुण विनिमय उपयोग कर सकते हैं। Google दस्तावेज़ here देखें (विशेष रूप से, openid.ax.type.email)।

+1

महान! जबकि मैं समझ नहीं पाया कि 'openid.ax.type.email' जैसे उन गुणों को "मानचित्र" कैसे लाइट ओपेनआईडी के अलग-अलग (' संपर्क/ईमेल') में जानना, यह जानकर कि यह * किया जा सकता है, मैं गहराई से देखा लाइट ओपेनआईड के दस्तावेज़ीकरण और मैं इसे करने में कामयाब रहा :) धन्यवाद –