首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP-GitHub-Api身份验证问题

PHP-GitHub-Api身份验证问题
EN

Stack Overflow用户
提问于 2015-07-24 06:48:35
回答 2查看 1K关注 0票数 19

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

我发送用户到Github的URL。

代码语言:javascript
复制
https://github.com/login/oauth/authorize?scope=repo,user&client_id=<client_id>

然后我使用php-github-api来做这件事。$token变量是当用户被重定向到回调时在$_GET数组中发送的代码。

代码语言:javascript
复制
        $client = new \Github\Client();
        try {
            $auth = $client->authenticate($token, Github\Client::AUTH_HTTP_TOKEN);
        } catch (Exception $e) {
            dp($e);
        }

有人知道这是否是验证用户身份的正确方法吗?当我尝试调用一个需要认证用户的方法时,我得到一个401状态码并返回一个错误。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-02 21:44:31

感谢大家的建议。似乎必须将access_token提供给身份验证方法,所以我实现的一个简单的修复方法是使用CURL请求获取access_token,然后将其添加到回调中的身份验证方法中。

代码语言:javascript
复制
        $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方法,并将其缓存到某个地方,目前我正在会话中执行此操作。

代码语言:javascript
复制
$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,但是我遇到了一些问题,所以我选择了一个更简单的解决方案。

票数 5
EN

Stack Overflow用户

发布于 2015-07-31 04:01:27

问题是,您使用的是在用户作为$token进行身份验证后收到的代码,而您本应使用它来获取实际的令牌。使用client_id、client_secret、代码(用作令牌)、状态和redirect_uri向https://github.com/login/oauth/access_token发出post请求。

您将得到如下格式的响应:access_token=e72e16c7e42f292c6912e7710c838347ae178b4a&scope=user%2Cgist&token_type=bearer

在比cURLing更容易获取令牌的HttpClient.php文件中有以下代码

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31599353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档