2012-08-03 364 views
0

你好我試圖驗證我使用accountManager從我的PHP服務器創建的令牌,但我不斷從我的PHP服務器上的谷歌服務器上收到錯誤「無效令牌」...這是代碼:無效Accountmanager身份驗證令牌

private String updateToken(boolean invalidateToken, int accountref) { 
    String authToken = "null"; 
    try { 
     AccountManager am = AccountManager.get(TestAuthActivity.this); 
     Account[] accounts = am.getAccountsByType("com.google"); 
     AccountManagerFuture<Bundle> accountManagerFuture; 
     if(TestAuthActivity.this == null){//this is used when calling from an interval thread 
      accountManagerFuture = am.getAuthToken(accounts[accountref], SCOPE, false, null, null); 
     } else { 
      accountManagerFuture = am.getAuthToken(accounts[accountref], SCOPE, null, TestAuthActivity.this, null, null); 
     } 
     Bundle authTokenBundle = accountManagerFuture.getResult(); 
     authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString(); 
     if(invalidateToken) { 
      am.invalidateAuthToken("com.google", authToken); 
      authToken = updateToken(false, accountref); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    Dialog d = new Dialog(TestAuthActivity.this); 
    d.setTitle("Token :" + authToken); 
    d.show(); 

    createSession(TestAuthActivity.this, authToken); 

    return authToken; 
} 

所以我得到一個令牌,然後我把它發送到我的PHP服務器:

<?php 

if(isset($_POST['authToken'])){   

    //pour que la réponse s'affiche comme du texte brut 
    header('Content-Type: text/plain'); 

    /*partie à modifier*/ 
    $name = 'www.google.com';//nom du site 

    $data = $_POST['authToken']; 

    $envoi = "POST /m8/feeds/contacts/default/full HTTP/1.1\r\n"; 
    $envoi .= "Host: ".$name."\r\n"; 
    $envoi .= "Authorization: GoogleLogin auth='".$data."'\r\n"; 
    $envoi .= "Connection: Close\r\n"; 
    $envoi .= "Content-type: application/x-www-form-urlencoded\r\n"; 
    $envoi .= "Content-Length: ".strlen($data)."\r\n\r\n"; 
    $envoi .= $data."\r\n"; 

    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
    if($socket < 0){ 
      die('FATAL ERROR: socket_create() : " '.socket_strerror($socket).' "'); 
    } 

    if (socket_connect($socket,gethostbyname($name),80) < 0){ 
      die('FATAL ERROR: socket_connect()'); 
    } 

    if(($int = socket_write($socket, $envoi, strlen($envoi))) === false){ 
      die('FATAL ERROR: socket_write() failed, '.$int.' characters written'); 
    } 

    $reception = ''; 
    while($buff = socket_read($socket, 2000)){ 
     $reception.=$buff; 
    } 
    echo(json_encode($reception)); 

    socket_close($socket); 
} 
?> 

,我不斷收到錯誤:401無效令牌:S

有沒有人h AVE溶液或好的樣品(無法找到符合我想做一個!)

回答

1

我能想到的兩種可能的問題,你可能有:

  1. 的身份驗證令牌已過期。當您調用方法updateToken()獲取令牌時,需要將參數invalidateToken設置爲true以確保獲得新的令牌。
  2. SCOPE的值是錯誤的。基於它看起來像你正在嘗試使用谷歌聯繫人API,這個API SCOPE應有的價值https://www.google.com/m8/feeds
您所提供的代碼