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.