2015-07-23 16 views
19

Próbuję uwierzytelnić użytkownika przy użyciu biblioteki php-github-api. Do tej pory wysłałem użytkownika do Github, aby umożliwić dostęp do mojej aplikacji i udało mi się odzyskać token. Nie jestem pewien, co teraz zrobić. Oto mój kod.PHP-GitHub-Api Authentication Issue

Adres URL, który wysyłam użytkownikowi do Githuba z.

https://github.com/login/oauth/authorize?scope=repo,user&client_id=<client_id> 

Potem robię to za pomocą php-github-api. Zmienna $ token to kod wysyłany w tablicy $ _GET, gdy użytkownik jest przekierowywany do wywołania zwrotnego.

 $client = new \Github\Client(); 
     try { 
      $auth = $client->authenticate($token, Github\Client::AUTH_HTTP_TOKEN); 
     } catch (Exception $e) { 
      dp($e); 
     } 

Czy ktoś wie, czy jest to poprawna metoda uwierzytelniania użytkownika? Kiedy próbuję wywołać metodę, która wymaga uwierzytelnionego użytkownika, otrzymuję kod statusu 401 i błąd w zamian.

Z góry dziękuję!

+0

[Drugi argument] (https://github.com/KnpLabs/php-github-api/blob/master/doc/security.md) powinien być hasłem. Dokumenty mówią, że należy je "pominąć", ale może to oznaczać przekazanie hasła "" lub "null". Jeśli faktycznie go pominiesz, w rzeczywistości pomijasz * metodę * i ustawiasz hasło na 'Github \ Client :: AUTH_HTTP_TOKEN'. – GolezTrol

+2

To nie jest prawda - sprawdziłem samą metodę uwierzytelniania i sprawdza, czy drugie parametry są jednym z typów uwierzytelniania. W ten sposób wie, czy drugi parametr jest hasłem, czy typem uwierzytelniania. Dziękuję za odpowiedź! –

+0

i jesteś pewien, że $ client jest instancją 'Github \ Client'? Jeśli jest to instancja 'Github \ HttpClient \ HttpClient', odpowiedź GolezTrol jest właściwa. –

Odpowiedz

5

Dziękuję wszystkim za sugestie. Wygląda na to, że musisz podawać access_token do metody uwierzytelniania, więc łatwa łatka, którą zaimplementowałem, była żądaniem CURL, aby pobrać atrybut access_token, a następnie dodać go do metody uwierzytelniania w wywołaniu zwrotnym.

 $token = $_POST['token']; 
     $params = [ 
      'client_id'  => self::$_clientID, 
      'client_secret' => self::$_clientSecret, 
      'redirect_uri' => 'url goes here', 
      'code'   => $token, 
     ]; 

    try { 
     $ch = curl_init('https://github.com/login/oauth/access_token'); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
     $headers[] = 'Accept: application/json'; 

     curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
     $response = curl_exec($ch); 
    } catch (\Exception $e) { 
     dp($e->getMessage()); 
    } 

Potem w rozmowie z powrotem możemy wywołać metodę uwierzytelnić i buforować go gdzieś, obecnie robie to na sesji.

$client = self::getClient(); 
    $_SESSION['access_token'] = $response->access_token; 

    try { 
     $client->authenticate($response->access_token, Github\Client::AUTH_HTTP_TOKEN); 
    } catch (\Exception $e) { 
     dp($e->getMessage()); 
    } 

Tak więc mamy go.

Próbowałem użyć HttpClient biblioteki php github api, ale miałem pewne problemy, więc wybrałem bardziej proste rozwiązanie.

4

Problem polega na tym, że używasz kodu, który otrzymałeś po uwierzytelnieniu użytkownika jako $token, kiedy powinieneś go użyć, aby uzyskać rzeczywisty token. Wyślij prośbę o wpis do https://github.com/login/oauth/access_token za pomocą identyfikatora client_id, client_secret, kodu (używanego jako token), stanu i redirect_uri.

dostaniesz z powrotem odpowiedź w tym formacie access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&scope=user%2Cgist&token_type=bearer

nie jest to kod w pliku HttpClient.php która stałaby się łatwiejsza niż token Curling

public function post($path, $body = null, array $headers = array()) 
{ 
    return $this->request($path, $body, 'POST', $headers); 
} 

https://developer.github.com/v3/oauth/#github-redirects-back-to-your-site

+0

Tak, dokładnie to dobrze - ale jak mam to zrobić za pomocą biblioteki php-github-api? Byłem przy założeniu, że metoda uwierzytelniania, której używam, wyśle ​​żądanie uzyskania tokena dostępu. Wydaje się to trochę bezsensowne, jeśli sam muszę napisać żądanie CURL, aby uzyskać token dostępu, zanim będę mógł zacząć korzystać z biblioteki php-github-api. –

+0

Nie mogę znaleźć ani w dokumencie, ani w szybkim skanowaniu kodu. – Andrew

+0

To samo - Przypuszczam, że następnym etapem jest zbadanie kodu, aby sprawdzić, czy kiedykolwiek zostanie wywołana dostępowa trasa _token, jeśli nie, rozszerzę bibliotekę, aby poradzić sobie z tym również. –