2012-08-03 366 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
您所提供的代码