google example php github github-api

example - Problema de autenticación de PHP-GitHub-Api



google php (2)

El problema es que estás usando el código que recibes después de que el usuario se autentica como $token cuando se supone que debes usarlo para obtener un token real. Realice una solicitud de publicación en https://github.com/login/oauth/access_token con el client_id, client_secret, el código (lo que estaba usando como el token), el estado y redirect_uri.

Obtendrá una respuesta en este formato access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&scope=user%2Cgist&token_type=bearer

Hay este código en el archivo HttpClient.php que haría que obtener el token sea más fácil que curar

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

Estoy tratando de autenticar a un usuario usando la biblioteca php-github-api . Hasta ahora he enviado al usuario a Github para que permita el acceso a mi aplicación y recibo con éxito un token. No estoy seguro de qué hacer ahora. Aquí está mi código.

La URL que envío el usuario a Github con.

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

Entonces con el php-github-api estoy haciendo esto. La variable $ token es el código que se envía en la matriz $ _GET cuando el usuario se redirige a la devolución de llamada.

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

¿Alguien sabe si este es el método correcto para autenticar a un usuario? Cuando trato de llamar a un método que requiere un usuario autorizado, obtengo un código de estado 401 y un error a cambio.

¡Gracias por adelantado!


Gracias a todos por sus sugerencias. Parece que tiene que introducir el access_token en el método de autenticación, por lo que una solución fácil que implementé fue una solicitud CURL para obtener el access_token y luego agregarlo al método de autenticación en la devolución de llamada.

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

Luego, en la devolución de llamada, podemos llamar al método de autenticación y guardarlo en algún lugar, actualmente lo hago en la sesió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()); }

Así que ahí lo tenemos.

Intenté usar el HttpClient de la biblioteca php github api pero tenía algunos problemas, así que elegí una solución más simple.