PHP GitHub Api身份验证问题

PHP GitHub Api身份验证问题,php,github,github-api,Php,Github,Github Api,我正在尝试对使用库的用户进行身份验证。到目前为止,我已经将用户发送到Github以允许我的应用程序访问,并且我成功地获得了一个令牌。我不知道现在该怎么办。这是我的密码 我将用户发送到Github的URL https://github.com/login/oauth/authorize?scope=repo,user&client_id=<client_id> 有人知道这是验证用户身份的正确方法吗?当我尝试调用一个需要经过身份验证的用户的方法时,我会得到一个401状态码,并返

我正在尝试对使用库的用户进行身份验证。到目前为止,我已经将用户发送到Github以允许我的应用程序访问,并且我成功地获得了一个令牌。我不知道现在该怎么办。这是我的密码

我将用户发送到Github的URL

https://github.com/login/oauth/authorize?scope=repo,user&client_id=<client_id>
有人知道这是验证用户身份的正确方法吗?当我尝试调用一个需要经过身份验证的用户的方法时,我会得到一个401状态码,并返回一个错误


提前谢谢

问题在于,当您应该使用它来获取实际令牌时,您正在使用用户验证为
$token
后收到的代码。向
https://github.com/login/oauth/access_token
带有客户端id、客户端机密、代码(您使用的令牌)、状态和重定向uri

您将得到以下格式的响应:
access\u token=E72E16C7E42F292C69612E7710C8347AE178B4A&scope=user%2Cgist&token\u type=bearer

在HttpClient.php文件中有这样一段代码,使得获取令牌比卷曲更容易

public function post($path, $body = null, array $headers = array())
{
    return $this->request($path, $body, 'POST', $headers);
}

谢谢大家的建议。似乎您必须将access_令牌提供给authenticate方法,因此我实现的一个简单修复是一个CURL请求来获取access_令牌,然后将其添加到回调中的authenticate方法

        $client = new \Github\Client();
        try {
            $auth = $client->authenticate($token, Github\Client::AUTH_HTTP_TOKEN);
        } catch (Exception $e) {
            dp($e);
        }
        $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());
    }
然后在回调中,我们可以调用authenticate方法并将其缓存到某个地方,目前我正在会话中执行此操作

$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());
    }
所以我们有了它


我确实尝试过使用php github api库的HttpClient,但我遇到了一些问题,所以选择了一个更简单的解决方案。

应该是密码。文档说应该“省略”,但可能他们的意思是为密码传递
'
null
。如果您真的忽略了它,那么实际上您忽略了该方法并将密码设置为
Github\Client::AUTH\u HTTP\u TOKEN
。这不是真的-我检查了身份验证方法本身,它检查第二个参数是否是身份验证类型之一。这样它就知道第二个参数是密码还是身份验证类型。谢谢你的回复!您确定$client是
Github\client
的实例吗?如果它是
Github\HttpClient\HttpClient
的一个实例,那么GolezTrol的答案是正确的。是的,它肯定是正确的(请参见更新)-我设法让AUTH_HTTP_PASSWORD方法工作,但这需要用户给我他们的Github登录凭据。我在想,也许我遗漏了一些东西,因为在我看来,仅基于通过URL传递的回调令牌生成身份验证令牌不会太安全。我还没有使用我的客户秘密。我确实尝试过将其作为我的密码,但它仍然不能与任何身份验证类型一起使用。您是否尝试过重新生成令牌?是的,这完全正确-但是我如何使用php github api库来实现这一点?我假设我使用的authenticate方法将发送请求以获取访问令牌。如果在开始使用php github api库之前,我必须自己编写一个CURL请求来获取访问令牌,这似乎有点毫无意义。我在文档中或快速扫描代码时都找不到。同样-我想下一步是研究代码,看看是否调用过访问令牌路由,如果没有,我也会扩展库来处理这个问题。我真的不认为它在库中。我甚至看不到在哪里向库传递客户端id和密码,这是获取令牌所必需的,因此它不会在authenticate方法中自动执行。肯定是个不错的补充。