使用php-Github-api进行Github身份验证


Github Authentication using php-github-api

我正试图使用KnpLabs的php-Github api在我的应用程序(使用Laravel 4构建)中实现Github身份验证。我继续在我的Github帐户中创建了一个应用程序,以获取client_id和密钥。

问题是,我无法使用此库进行身份验证。返回null结果。它的实现看起来很简单,但我无法实现它。看看我是如何实现它的。

try{
        $client = new Github'Client();
        $auth= $client->authenticate('myclientid','mysecret',AUTH_URL_CLIENT_ID);
        $emails = $client->api('current_user')->emails()->all();
        return Response::json(array("user"=>$emails));
    }catch(Exception $e){
        return Response::json(array('failed',$e->getMessage()));
    }

这是我从上面得到的结果:

 ["failed","Requires authentication"]

请有人帮我弄清楚我做错了什么。

谢谢。

我相信AUTH_URL_CLIENT_ID应该是Github'Client::AUTH_URL_CLIENT_ID

这更多的是一个Github问题,而不是一个php-Github-api问题,实际上:

curl "https://api.github.com/user/emails?client_id=xxxx&client_secret=yyyy"

也会失败,而:

curl "https://api.github.com/user/emails" -u mbontemps

效果很好。

我认为原因是client_id和client_secret对应用程序进行身份验证,而第二个命令对user进行身份验证。

这就像你在问:"嘿,应用程序,告诉我你的电子邮件"
应用程序正在回答:"等等,什么?我不是用户,伙计!"

因此,在IMO中,您需要为用户授权应用程序(这将为您提供一个令牌),然后使用该令牌通过OAuth机制进行身份验证。

cf。http://developer.github.com/v3/#basic-身份验证

祝你好运!

更新,不再使用Github'Client::AUTH_URL_CLIENT_ID。请参阅:

https://github.com/KnpLabs/php-github-api/blob/v3.3.0/doc/security.md

支持的方法有:

  • Github''Client::AUTH_Client_ID
  • Github''Client::AUTH_ACCESS_TOKEN
  • Github''客户端::AUTH_JWT

在这种情况下,$client->authenticate('myclientid','mysecret',AUTH_URL_CLIENT_ID)应为:

$client->authenticate('myclientid', 'mysecret', Github'Client::AUTH_CLIENT_ID)

如果使用auth令牌,我们可以提交mysecret/password部分:

$client->authenticate('myauthtoken', Github'Client::AUTH_ACCESS_TOKEN);