Memorykk

never too late to learn

记一次使用Github登录Gitalk跳至首页的解决过程

使用自定义域名之后的 Github page 在使用 Github 登录 Github 时跳转首页,无限循环

问题

博客使用的是Hexo+Github+Gitalk,使用 Github 登录 Gitalk 之后跳转至首页,无限循环,地址栏URL显示为:

https://memorykk.cn/?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdocs.github.com%2Fapps%2Fmanaging-oauth-apps%2Ftroubleshooting-authorization-request-errors%2F%23redirect-uri-mismatch

解决过程

为了更清楚地检查,将此 URL 中的 Unicode 转为中文:

https://memorykk.cn/?
error=redirect_uri_mismatch&
error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&
error_uri=https://docs.github.com/apps/managing-oauth-apps/troubleshooting-authorization-request-errors/#redirect-uri-mismatch

根据描述,redirect error registered callback URL不匹配。

打开F12查看Network

reirect_uri.png

this application我使用的是OAuth Apps,查看其Authorization callback URL,果不其然:

Auth_callback_URL.png

httphttps的差别还是很大的!修改Authorization callback URL为https之后成功了。

点击使用GitHub登录之后,又出现 405 问题,
405.png
打开F12查看Network
url1.png
转换为中文:

Request URL: https://memorykk.cn/TeamSpeak/%7B%7B%20theme.gitalk.proxy%20%7D%7D

Request URL: https://memorykk.cn/TeamSpeak/{{ theme.gitalk.proxy }}

好家伙,这还是源代码形式啊,坑定是后台有什么问题!
检查theme\layout\components\comment.ejs,这行代码果然是从这里出来的:

var gitalk = new Gitalk({
clientID: '<%= theme.gitalk_client_id %>',
clientSecret: '<%= theme.gitalk_client_secret %>',
repo: '<%= theme.gitalk_repo %>',
owner: '<%= theme.gitalk_owner %>',
admin: ['<%- theme.gitalk_admin.join("', '") %>'],
id: location.pathname,
distractionFreeMode: false,
createIssueManually: true,
proxy: '{{ theme.gitalk.proxy }}',
})

之前对node.js也不了解(虽然现在也一样,允悲),没注意格式。仿照上面几行代码改成:

proxy: '<%= theme.gitalk.proxy %>',

还是报 405 错误,打开F12查看:
405_2.png

总感觉之前白嫖的 CorsAnywhere Proxy 链接压根没有传递过去,直接手动写死在里面:

proxy: 'https://netnr-proxy.cloudno.de/https://github.com/login/oauth/access_token',

好家伙,成功了,ohhhhhhhhhhh,虽然这种做法极不优雅!

总结

网页出错先用F12看看哪部分的问题,顺藤摸瓜,缩小范围。