如果大家给苏南大叔写过评论的话,就会知道:苏南大叔的博客文章底部有个github的登陆按钮。点击这个按钮,就会调用github提供的oauth流程。这个流程的详细解释及相关源码,请参见文末链接。

苏南大叔:如何理解github的oauth最新规则,以修改对应typecho插件? - github-oauth-header
如何理解github的oauth最新规则,以修改对应typecho插件?(图2-1)

最近,苏南大叔收到了一封来自github的邮件。大意是:某个oauth接口有了新的使用方式,建议尽快修改。这,究竟是怎么回事呢?那么苏南大叔的登陆代码,要如何修改呢?

一封邮件

苏南大叔收到的邮件内容大概如下:

On ## ##, ### at ##:## (UTC) your application (newsn.net oauth login) used an access token (with the User-Agent newsn.net oauth client) as part of a query parameter to access an endpoint through the GitHub API:

https://api.github.com/user

Please use the Authorization HTTP header instead as using the `access_token` query parameter is deprecated.

Depending on your API usage, we'll be sending you this email reminder on a monthly basis.

Visit https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param for more information about suggested workarounds and removal dates.

Thanks,
The GitHub Team

大意就是/user这个请求,传递access_token的方式,从get方式要换成header的方式。比如:

curl "https://api.github.com/user/repos?access_token=my_access_token"

变成:

curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos

苏南大叔:如何理解github的oauth最新规则,以修改对应typecho插件? - github-blog-explain
如何理解github的oauth最新规则,以修改对应typecho插件?(图2-2)

官方的解释,请参见这个链接:

代码修改

因为苏南大叔发布过一份typechogithub登陆代码,所以,苏南是基于这份代码来看待本次的修改。当然,如果您是基于其他的框架代码修改的。大概的思路也是一样的。

  • 基本库函数 /usr/plugins/SNAuth/AuthFunction.php:
public function oAuthRequest($url, $method = "GET", $parameters = [], $multi = false) {
    switch ($method) {
        case 'GetWithHeader':
            return $this->http($url,'GET', NULL, $parameters);
        case 'GET':
            //...
        default:
            //...
    }
}
  • 调用修改 /usr/plugins/SNAuth/AuthAction.php:
//$user_str = $this->AuthFunction->oAuthRequest("https://api.github.com/user", "GET", ["access_token" => $access_token]);
$user_str = $this->AuthFunction->oAuthRequest("https://api.github.com/user", "GetWithHeader", ["Authorization:token ".$access_token]);

当然,这里苏南大叔就修改了/user这一个请求,至于其他的请求,也许也是需要修改的,但是苏南大叔这里并没有用到。大概思路就是把access_token换到header里面去传递。特殊的地方,就是传递的格式,这个是最重要的:

"Authorization:token ".$access_token
值得注意的是:在编写程序的时候,这个header数组,key是默认的自动增加的数字值,valueAuthorization:token xxxxxx

相关链接

代码下载地址如下,记得给个star,谢谢。

总结

github的这个操作,符合主流程序逻辑。值得推广!顺便说一下,才发现,已经有人给我star了小星星。感动!

来看看更多的oauth文章吧!点击下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   github    oauth

本站的忠实读者小伙伴,正在阅读下面这些文章: