我正试图使用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);