2015-07-23 37 views
19

Tôi đang cố gắng xác thực người dùng bằng cách sử dụng thư viện php-github-api. Cho đến nay tôi đã gửi người dùng đến Github để cho phép truy cập ứng dụng của tôi và tôi đã nhận được mã thông báo thành công. Tôi không biết phải làm gì bây giờ. Đây là mã của tôi.Vấn đề xác thực PHP-GitHub-Api

URL tôi gửi người dùng đến Github.

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

Sau đó, với php-github-api Tôi đang thực hiện việc này. Biến $ token là mã được gửi trong mảng $ _GET khi người dùng được chuyển hướng đến cuộc gọi lại.

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

Có ai biết đây có phải là phương pháp đúng để xác thực người dùng không? Khi tôi thử và gọi phương thức, yêu cầu người dùng tự động nhận được mã trạng thái 401 và lỗi trả lại.

Cảm ơn trước!

+0

[đối số thứ hai] (https://github.com/KnpLabs/php-github-api/blob/master/doc/security.md) phải là mật khẩu. Tài liệu nói rằng nó nên được 'bỏ qua', nhưng có lẽ chúng có nghĩa là truyền '''' hoặc 'null' cho mật khẩu. Nếu bạn thực sự bỏ qua nó, bạn thực sự bỏ qua phương thức * và thiết lập mật khẩu thành 'Github \ Client :: AUTH_HTTP_TOKEN'. – GolezTrol

+2

Điều này không đúng - tôi đã kiểm tra chính phương thức xác thực và kiểm tra xem thông số thứ hai có phải là một trong các loại xác thực hay không. Bằng cách đó, nó biết nếu tham số thứ hai là mật khẩu hoặc một loại xác thực. Cảm ơn vi đa trả lơi! –

+0

và bạn chắc chắn $ client là một cá thể của 'Github \ Client'? Nếu nó là một thể hiện của 'Github \ HttpClient \ HttpClient', câu trả lời của GolezTrol là đúng. –

Trả lời

5

Cảm ơn tất cả mọi người vì đề xuất của họ. Có vẻ như bạn phải nạp access_token vào phương thức xác thực để sửa chữa dễ dàng tôi đã thực hiện là một yêu cầu CURL để lấy access_token sau đó thêm nó vào phương thức xác thực trong cuộc gọi lại.

 $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()); 
    } 

Sau đó, trong khi gọi lại, chúng tôi có thể gọi phương thức xác thực và lưu trữ nó ở đâu đó, hiện tại tôi đang làm điều này trong phiên.

$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()); 
    } 

Vì vậy, chúng tôi có nó.

Tôi đã thử sử dụng HttpClient của thư viện php github api nhưng tôi đã gặp một số vấn đề để chọn giải pháp đơn giản hơn.

4

Vấn đề là bạn đang sử dụng mã bạn nhận được sau khi người dùng xác thực là $token khi bạn được yêu cầu sử dụng mã đó để nhận mã thông báo thực tế. Thực hiện yêu cầu gửi tới https://github.com/login/oauth/access_token với client_id, client_secret, mã (những gì bạn đang sử dụng làm mã thông báo), trạng thái và chuyển hướng_uri.

Bạn sẽ nhận lại một phản ứng trong định dạng này access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&scope=user%2Cgist&token_type=bearer

Có mã này trong file HttpClient.php đó sẽ làm cho nhận được dấu hiệu dễ dàng hơn uốn

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

Đúng vậy, nhưng làm cách nào để thực hiện điều đó bằng thư viện php-github-api? Tôi đã được giả định rằng phương pháp xác thực tôi đang sử dụng sẽ gửi yêu cầu để có được mã thông báo truy cập. Có vẻ hơi vô nghĩa nếu tôi phải tự mình viết một yêu cầu CURL để lấy mã thông báo truy cập trước khi tôi có thể bắt đầu sử dụng thư viện php-github-api. –

+0

Tôi không thể tìm thấy tài liệu trong tài liệu hoặc trong quá trình quét nhanh qua mã. – Andrew

+0

Tương tự - tôi đoán giai đoạn tiếp theo là điều tra mã để xem liệu tuyến đường truy cập _token có được gọi hay không, nếu không tôi cũng sẽ mở rộng thư viện để xử lý điều này. –

Các vấn đề liên quan