2012-04-11 16 views
5

Google API'nın nasıl kullanılacağına ilişkin dokümanları, örnekleri ve eğiticileri okudum, en son etkinliklerinizi ve bilgilerinizi gösteren bir mini uygulama var. belirteci saklamak için oturumları kullanın.Google+ OAuth API, ilk oturum açtıktan ve yetkilendirildikten sonra jetonları saklar ve alır

Sorum, belirteci veritabanından nasıl saklayabilir ve alabilirim, böylece bir kullanıcı (daha önce kayıt olan) "oturum aç" ı tıklattığında, API'yi tekrar tekrar yetkilendirme olmadan kullanabilir mi? Örneği mini uygulamam için başlangıç ​​noktası olarak kullandığımı unutmayın.

$client = new apiClient(); 
$client->setApplicationName(APP_NAME); 
$client->setClientId(CLIENT_ID); 
$client->setClientSecret(CLIENT_SECRET); 
$client->setRedirectUri(REDIRECT_URL); 
$client->setDeveloperKey(DEV_KEY); 

$plus = new apiPlusService($client); 
$google_userinfo = new apiOauth2Service($client); 

$message = ""; 

// In a real application this would be stored in a database, and not in the session! 
if (isset($_SESSION['token'])) 
    $client->setAccessToken($_SESSION['token']); 

$_SESSION['token'] = $client->getAccessToken(); 

if (isset($_GET['code'])) { 
    $client->authenticate(); 
    // In a real application this would be stored in a database, and not in the session! 
    $_SESSION['token'] = $client->getAccessToken(); 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
} 
... 
//Somewhere here, I added a function that ties $_SESSION['token'] to the user's info. 
... 
<form action="" method="post" id="form1" name="form1"> 
    <fieldset> 
     <div id="main-url-section" style="width: 50%;margin: 0px auto;text-align: center;"> 
     <?php 
      $authUrl = $client->createAuthUrl(); 
      print "<p><a class='login' href='$authUrl'>Log me in!</a></p>"; 
     ?>         
     </div> 
    </fieldset> 
</form> 

Yardımın için çok teşekkür ederim:

İşte bir kod parçacığı İşte!

Selamlar,

John

cevap

9

Eğer zaten uygulamayı yetkili kişiler için yetki istemini atlamak üst adresinden yapılandırma bloğunda bu kodu eklemek için Google'a isterseniz:

$client->setAccessType("online"); 
$client-> setApprovalPrompt("auto"); 

Bu çözümle bir yakalama var: OAuth dansınızı tamamladığınızda bir yenileme belirteci almayacaksınız. Bu, kullanıcılarınızın yeni bir tane almak için erişim belirteci her dolduğunda Google'ın kimlik doğrulama hizmetine yönlendirileceği anlamına gelir. Bu kabaca her saat başı olacak. Varsayılan olarak

Arkaplan Bilgisi

PHP istemci kütüphanesi offline access sağlamak üzere yapılandırılmıştır. Bunu source code'da görebilirsiniz. Bu mod etkinleştirildiğinde, OAuth akışı, gerektiğinde yeni erişim belirteçleri istemek için kullanılabilecek bir refresh token verecektir. Bu olayın farkına bile varamayabilirsin. PHP istemci kütüphanesi bunun için çoğunu halleder.

Bu yenileme belirteci olsa da, bir maliyetle geliyor. Onu depolamaktan sorumlusunuz. Kaybetirseniz, kullanıcınız başka bir yayınlanmış olmanız için başvurunuzu yeniden yetkilendirmelidir. Sakladığınız yol, uygulamanızın ayrıntılarına çok bağlıdır. Eğer yeterince dayanıklı hale getirebilirseniz, oturum verileri bunu yapmak için makul bir yoldur.

+0

Teşekkür Amos! Bu yararlı ve geçici bir çözüm olarak kullanabilirim. :) Zaten kontrol ettim. Ama) Sen nasıl $ client-> getAccessToken (olsun belirteçleri saklamak bilmek veya herhangi yayına bağlantı var mı? ve kullanıcı giriş yaptığında bunları kullanabilir mi? – user1239714

+0

user1239714 @: Burada tavsiye için bağlamak için belirli bir yere ait bilmiyorum. Uygulamanızdaki verilerin geri kalanını nasıl sürdürdüğünüze bağlıdır. Tipik bir LAMBA uygulama yazıyorsanız Örneğin, bu daha sonra hatırlamak için MySql yenileme jetonu depolamak için mantıklı olabilir. – mimming

+1

@JennyMurphy "Sen kaynak kodunda görebilirsiniz". Bağlantı bozuk. Başka bir numuneyi @knightrider Kafaları için – knightrider

0

Bu eski bir soru ama bana cevap tam değil gibi görünüyor.

Kabul edilen yanıt, kullanıcının Google Auth sunucusundan geçtiği bir şekilde çalışır, yalnızca Yetkilendirme ekranını görmez. Soru, jetonu depolamak ve kullanıcıyı Google Sunucu'ya göndermeden tekrar kullanmaktı.

Yapmak istediğiniz şey buysa (ve ayrıca şu anda uygulamanızı kullanmadıkları zamanlarda bile kullanıcı verilerine erişmenize izin verir), yapmanız gereken tek şey bir yenileme belirteci içeren bir erişim belirtecini sormaktır. .

Bunu, çevrimdışı erişim türünü kullanarak (bu arada artık varsayılan değil) yapabilirsiniz - örneğin, php: $client->setAccessType("offline");.

Aldığınız erişim kodunun, yalnızca kullanıcı tarafından ilk ilk yetkilendirmede yenileme belirtecini içereceğini unutmayın; bu nedenle saklamanız gereken şey budur.

Sonra sadece zaman aşımına bile müşteri ile erişimin belirteci kullanabilirsiniz ve istemci onu ferahlatıcı ve yenisini alma ilgilenir. yardımcı olur

Umut, bu yanıt için