OAuth kullanarak Twitter kimliğini doğruladıktan sonra bir kullanıcının e-posta kimliğini almanın bir yolu var mı?


85

OAuth'ta yeniyim ve Twitter API ile uğraşıyorum. Kimlik doğrulamasından sonra bir istekte bulunarak bir kullanıcının kimlik bilgilerini getirebiliyorum http://api.twitter.com/1/account/verify_credentials.xml. Yanıt kullanıcı kimliği, ekran adı vb. İçerir ancak e-posta kimliğini içermez.

Kullanıcının e-posta kimliğini almak mümkün müdür?

Güncelleme

Özellikle genişletilmiş izinler talep ederseniz Facebook'un bu bilgileri sağladığına inanıyorum . Twitter için benzer bir şey var mı?


@Philip:: PI kabul ediyorum ve öyle olmadığından şüpheleniyorum, ancak doğrulamak ve Çekleri İmzalayan Kişiye rapor etmek istedim.
Manoj Govindan

2
@Philip Potter bunu neden söylüyorsun? e-posta adresi, oauth sağlayıcılarının çoğu arasındaki temel referans noktasıdır. 3. taraf oturum açma işlevine sahip bir web siteniz varsa (bu web sitesi gibi) ve bir kullanıcı twitter ile oturum açarsa, kullanılabilecek tek benzersiz tanımlayıcı user_id'dir. Bir dahaki sefere kullanıcı gelir ve google ile giriş yaparsa, bunun öncekiyle aynı kullanıcı olduğunu bilemezsiniz. ancak iki farklı üçüncü taraf sağlayıcı bir e-posta adresi verirse, aynı kişi olduğundan emin olabiliriz (e-posta adresi 3. şahıslar tarafından doğrulandığı sürece)
mulllhausen

@mulllhausen aynı kişinin farklı e-posta hesapları olabilir. E-posta seçeneğine sahip olmak daha güzel. Twitter'ın desteklemediği e-posta adresine güvenmek yerine, bir sağlayıcı aracılığıyla kimlik doğrulaması yaptıktan sonra birden fazla hesabı eşleştirme yeteneğini buna dahil edeceğim. Sadece sahip olduklarınla ​​yuvarlan diyorum.
Jason Sebring

Yanıtlar:


106

Kullanıcının e-posta adresi API aracılığıyla alınamaz. Bu, API ekibinin kasıtlı bir tasarım kararıdır.

GÜNCELLEME 2015.08.18:

Kullanıcılardan bir e-posta adresi talep etmek mümkündür, ancak bu, uygulamanızın beyaz listeye alınmasını gerektirir. Bkz https://dev.twitter.com/rest/reference/get/account/verify_credentials API çağrısı ve ayrıntıları için bu formun uygulamanızın beyaz liste isteğine.


11
Bunu hata olarak kaydedebilir miyiz, kimliği doğrulanmış kullanıcının e-posta adresine çok ihtiyacım var?
iMOBDEV

9
Çok kötü ve söylediğiniz gibi kasıtlı bir karar. Birini yetkilendiriyorsanız ve kendi kullanıcı veritabanınız varsa, mevcut bir kullanıcının (aynı e-posta ile) zaten mevcut olup olmadığını kontrol etmeniz gerekir.
Keyne Viana

4
@JigneshBrahmkhatri Uygulamamda e-posta adresi gerektiren mevcut Kullanıcı modelimle aynı sorunu yaşadım. Ekstra adıma giderek bunu düzelttim ve kullanıcıya eksik bilgileri tamamlamak için bir form gösterdim.
Kenny Meyer

24
@KennyM. Bu çok güvenli değil, bana ait olmayan bir hesabın e-postasını yazıp o hesapla eşleştirebilirim ...
Brian Graham

3
Bir kullanıcı Twitter ile oturum açtığında, ondan da bir e-posta adresi girmesini ve ardından hesabını etkinleştirmeden önce bu adresi doğrulamasını istiyorum. Temel olarak, bir parola gerektirmek yerine Twitter hesaplarını kullanmalarına izin veriyorum.
Gus Shortz

16

İçin OutsourceFactor Python / Django yazılır, ben OAuth1 aracılığıyla kullanıcı adını almak, sonra da "username@twitter.com" twitter boyunca benzersiz olması garanti edildiği gibi bir e-posta oluşturmak. Ardından, yerel kullanıcı hesabımla kullanılacak ve ilişkilendirilecek güzel bir UUID elde etmek için hashledim. Yahoo için de aynı şey. Google ve Facebook oAuth2 kullanıyor ve istek üzerine bana e-posta adresini veriyorlar ki bu güzel.

Tek bir hesapla birden çok sosyal ilişki sağlamak için, sosyal hesap ilişkilendirmelerine YALNIZCA kullanıcı yerel olarak bir hesap oluşturduktan ve oturum açtıktan sonra izin veriyorum.

Bu nedenle, önce bir hesap oluşturmanız gerekir (yerel hesap), ardından gelecekteki girişlerinizi kolaylaştırmak için sosyal oAuth sağlayıcılarından herhangi birini kullanabilirsiniz. Bu, sitem için en iyi paranın karşılığını veren.

Her neyse, twitter'dan benzersiz bir kimlik formu alırsınız. Bu yüzden sadece kullanın. İlişkilendirmeden sonra veya öncesinde bir e-posta adresi isteyebilirsiniz.


4
"Gelecekteki girişlerinizi kolaylaştıracak sağlayıcılar", buna katılmıyorum, çünkü Müşterinin her zaman doldurmaktan hoşlanmadığı çok büyük bir form göstererek yerel bir hesap oluşturmalarını isteyerek onlara sorun çıkardınız.
RJR

@RJR Twitter size bir e-posta adresi vermiyor. Yani yine de istemelisin. Benim durumumda, elimde iken ben de bir şifre soruyorum. Farklı gereksinimleri olan bir siteniz olabilir ve bu da sorun değil.
un33k

3

E-posta adresi, OAuth yanıtlarında Twitter tarafından gizlenmiştir. Bu, bir "Twitter'a Kaydol" işlevini eklemek isteyen kişiler için her zaman büyük bir sorun olmuştur.

Daha yakın zamanlarda (2015'in başlarında), Twitter ikinci bir hizmet çağrısı yoluyla e-posta adresi desteği ekledi, ancak belirli, kötüye kullanılan koşullar altında.

https://dev.twitter.com/rest/reference/get/account/verify_credentials

Yani şimdi mümkün, ancak benim fikrim her sağlayıcıda ama twitterda tek oturum açma OAuth'u uygulamaya devam etmek. Normal şekilde hareket edene kadar boykot edilmeleri gerekir, yani diğer tüm OAuth sağlayıcıları gibi.


3

Fabric kullanan Android'de , kullanıcının e-posta adresini şu şekilde istiyorum:

TwitterAuthClient authClient = new TwitterAuthClient();

authClient.requestEmail(session, new Callback<String>() {

    @Override
    public void success(Result<String> result) {
        // Do something with the result, which provides the email address
    }

    @Override
    public void failure(TwitterException exception) {
      // Do something on failure
    }
});

Bkz. Http://docs.fabric.io/android/twitter/request-user-email-address.html


evet android için de aynı şeyi yapıyorum ancak web'de e-posta adresi alamıyorum ayrıca bu bağlantıyı takip ederek e-posta adresi talebinde bulunuyorum dev.twitter.com/rest/reference/get/account/verify_credentials
Muhammad Waqas

1

Benim durumumda, yanıtı her aldığımda, her kullanıcı için benzersiz bir kimlik doğrulama kimliği aldım ve bu kullanıcı için her seferinde aynı. Bu nedenle, benzersiz_kimlik@twitter.com gibi bir e-posta oluşturmak için bu kimliği kullandım ve bunun zaten sitemde olup olmadığını kontrol ettim (ilk kez değil) ve ardından kullanıcıyı kaydettirdim. Sonra ikinci kez oturum açarsa, e-postayı tekrar oluştururum ve zaten orada olup olmadığını kontrol ederim. Bununla, önce yerel bir hesap oluşturmasını sağlamak zorunda değilim ve giriş yapması için onu tanımlayabilirim.


1

İşte Laravel'de twitter kullanıcı e-postasının nasıl alınacağına dair bir örnek ve coditty.com'da Angular + Laravel kullanarak tam örneği bulabilirsiniz.

 // get token secret from db 
        $token = TwitterTokens::where('oauth_token', $request->input('oauth_token'))->first(); 


        // open twitter connection
        $connection = new \Abraham\TwitterOAuth\TwitterOAuth(
                        $this->twitter_consumer_key, 
                        $this->twitter_secret, 
                        $request->input('oauth_token'), 
                        $token->oauth_token_secret// twitter secret from DB
                        );

        // get acces token
        $access_token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $request->input('oauth_verifier')]); 

         // new TwitterOAuth instance to get email
        $twitterOAuth = new \Abraham\TwitterOAuth\TwitterOAuth( $this->twitter_consumer_key, $this->twitter_secret, $access_token['oauth_token'], $access_token['oauth_token_secret'] );

        // Let's get the user's info with email
        $twitterUser = $twitterOAuth->get('account/verify_credentials', ['include_entities' => 'false','include_email'=>'true','skip_status'=>'true',]);


        // output user object from twitter in your Log file
        Log::info(['user'=>$twitterUser]);

1
Potansiyel bir çözüme bağlantı her zaman memnuniyetle karşılanır, ancak lütfen bağlantının etrafına bağlam ekleyin, böylece diğer kullanıcılarınız bunun ne olduğu ve neden orada olduğu konusunda fikir sahibi olur. Hedef sitenin erişilemez olması veya kalıcı olarak çevrimdışı olması durumunda, her zaman önemli bir bağlantının en alakalı kısmını alıntılayın. Harici bir siteye verilen bir bağlantıdan ancak fazlası olmanın , bazı yanıtların neden ve nasıl silineceği konusunda olası bir neden olduğunu göz önünde bulundurun. .
Tunaki

0

Mümkün olmadığını kim söyledi ???

Uygulamayı beyaz listeye ekledikten sonra iOS Uygulamama girdim. Cevabımı burada kontrol edin .


0

Bu kodu ekleyin!

$params = array('include_email' => 'true', 'include_entities' => 'false', 'skip_status' => 'true');

`$data = $connection->get('account/verify_credentials', $params); // get the data`

// getting twitter user profile details $twt_id = $data->id; //twitter user id $twt_email = $data->email; //twitter user email

Tam prosedürü buradan kontrol edin .


0

Kullanıcılara e-posta alamayacağınızı kim söyledi, "Kullanıcılardan e-posta adresi isteyin" onay kutusu, apps.twitter.com'daki uygulama izinlerinin altında bulunur . E-posta adresine erişimin çalışması için uygulama ayarlarında Gizlilik Politikası URL'si ve Hizmet Şartları URL alanları doldurulmalıdır. Etkinleştirilirse, kullanıcılara uygulamanızın e-posta adreslerine erişebileceği oauth / yetkilendirme iletişim kutusu aracılığıyla bilgi verilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.