R3.0.2 Github redirect_uri_mismatch

library(httr)

# 1. Find OAuth settings for github:
http://developer.github.com/v3/oauth/

oauth_endpoints("github")

# 2. Register an application at
https://github.com/settings/applications

#Insert your values below - if secret is omitted, it will look it up in the GITHUB_CONSUMER_SECRET environmental variable.
#Use http://localhost:1410 as the callback url

myapp <- oauth_app("github", "56b637a5baffac62cad9")

# 3. Get OAuth credentials

github_token <- oauth2.0_token(oauth_endpoints("github"), myapp)

# 4. Use API

gtoken <- config(token = github_token)

req <- GET("https://api.github.com/rate_limit", gtoken)

stop_for_status(req)

content(req)

# OR:
req <- with_config(gtoken, GET("https://api.github.com/rate_limit"))
stop_for_status(req)
content(req)

在3.0.2的Rgui下,按照https://github.com/hadley/httr/blob/master/demo/oauth2-github.r 進行github 操作,在返回token的這一步,一直出現redirect_uri_mismatch ERROR。在網上查了很久,又查看了github的OAuth幫助頁面,不知如何解決,參考各種答案也是不明所以。
看到的回答多是說重設redirect_uri。
問題是要重設只能重設application里面的callback uri。已經來回換了好幾次,依然報錯。
本地代碼里面,根本沒出現過關于設置redirect uri的跡象,default值不知道在哪里。要重設本地的也無從入手。

這個問題一直困擾了我半個多月。今天又再回來處理這個問題,還是沒有頭緒。后來想,RStudio的配置比base的Rgui要人性化,說不定在RStudio能成功,或者至少能看出一點端倪。使用RStudio,在潛意識里,有種cheating的感覺,但也實在沒有辦法。
在RStudio中試過之后,依然報出mismatch的錯誤。
但是在跳轉網頁的過程中,request持續了較長時間。然后我觀察了一下request的url,發現redirect_uri的地址竟是http://localhost:1410 ,無語之極。之前根本沒設過這個callback uri。什么時候偷偷設置的也不得而知。
于是我將這個地址粘到github application中的callback uri中,再次request token,終于成功跳轉授權頁面。

成功實現之后,返回來翻看了下代碼,以及函數意義。發現例子中的github這個詞是個坑。如果我沒有理解錯:
1.oauth_endpoints("github")中的github指的是github網站名。
endpoints函數返回網站的連接點信息。oauth_endpoints本身是一個常用網站連接點信息的結合,可以認為是一個dataset,存好了常用網站數據等你使用。
這里不會摻入redirect_uri的信息。甚至去掉這行代碼,我也不覺得對功能實現有何影響。
2.myapp <- oauth_app("github", "56b637a5baffac62cad9")中的github其實是你注冊的application的名字。比如我的app name是CleanData,所以我是oauth_app("CleanData","...").

起初我以為,我錯在了第2點。因為剛開始我使用了github作為app name,而不是自己的CleanData。所以獲取token的時候,callback uri的default值,來源于名叫github的application里設置的uri。為了驗證想法,我重新更新了github網站上,App的callback uri=http://localhost:1234 ,同時代碼改成:myapp<-oauth_app("CleanData","..my client id...")之后,get token依然出現mismatch的錯誤。用chrome自帶抓包系統查看瀏覽器的request,發現依然是以localhost:1410為redirect uri。
手動更改瀏覽器的request,把1410換成1234跳轉成功,點擊授權。但是回頭看Rgui,沒有收到返回數據。
瞬間凌亂了。尼瑪!這1410的localhost特么哪里跑出來的!

ps.回頭看視頻,appname居然是隨便取,取github和取CleanData都一樣,github只是說明這是一個github的app。damn!
pss.F**K! acesss github網頁根本不需要注冊應用,然后通過token訪問。直接fromJSON(url)獲取內容即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容