StackExchange API:无法解析client_id

时间:2018-06-15 04:55:32

标签: r oauth-2.0 stackexchange-api

我正在尝试连接到R中的StackExchange API。

当我尝试:

library(httr)
end <- oauth_endpoint(authorize   = "https://stackoverflow.com/oauth",
                           access = "https://stackoverflow.com/oauth")

myapp <- oauth_app("myapp",
                   key    = "KEY",           # tried swapping these
                   secret = "CLIENT SECRET",
                   redirect_uri = "https://stackoverflow.com/oauth/login_success")

token <- oauth2.0_token(end,
                        myapp)

浏览器打开但会导致以下消息(在浏览器中):

Couldn't parse `client_id`

如果我尝试使用keysecret的相反(反向)值,或将key设置为值secret=NULLkey的事件,也会发生这种情况没有特权访问的测试。)

StackExchange API docs说他们给你的client_secret值并不是真正的秘密,但oauth_app值是。secret。在((帮助中,它表示key = ""“不等同于密码,并不是真正的秘密”。有趣。

现在我只是想建立一个初始测试连接。

更新的     我很好奇,如果它实际上是一个无法解析特殊字符的问题。我尝试在我的密钥和client_secret中转义2个括号(class Tour extends Model { // protected $fillable = [ 'name', 'price', 'category', 'overview', 'activity', 'exclusion', 'inclusion', 'policies', 'guide_id', 'province_id' ]; public function tourImages(){ return $this -> hasMany('App\TourImage'); } } class TourImage extends Model { // protected $fillable = [ 'name', 'path', 'tour_id' ]; public function tour(){ return $this -> belongsTo('App\Tour'); } } )。这并没有改变任何事情。然后我尝试将两者都设置为一个空字符串(即public function index($province_id = null) { $tours = Tour::where('province_id', $province_id)->get(); return view('tours.index', ['tours' => $tours]); } 等)然后以某种方式导致相同的结果。我觉得这是一个线索,但我仍然不知道出了什么问题。

2 个答案:

答案 0 :(得分:2)

您正在使用implicit ("Client side") OAuth(SE API Doc)

这意味着auth序列应如下所示:

  1. 您的应用HTTP GETS:

    https://stackexchange.com/oauth/dialog?client_id=4709&scope=private_info&redirect_uri=https://stackexchange.com/oauth/login_success
    

    根据您的具体情况设置client_idscope

  2. 然后,您的应用会重定向到:

    https://stackexchange.com/oauth/login_success#access_token=wdR8Lm7m4ibD48lfrCcFxQ))&expires=86399
    

    例如。

    其中access_token是您需要身份验证的后续调用所需的内容。

  3. 我不是编码员,但是猜测语法应该是这样的:

    myapp <- oauth_app("myapp",
        client_id   = "{Your App's ID}",
        scope       = "private_info",  #  Or whatever is desired. See the doc page linked above
        redirect_uri = "https://stackoverflow.com/oauth/login_success")
    
    • client_secret仅用于服务器端(显式)OAuth。
    • 在所有后续电话中传递key,OAuth是否需要,以达到配额目的。

答案 1 :(得分:0)

我遇到了同样的错误,我的问题是我将客户端机密用作我的client_id参数的值