我正在尝试设置一个本地的无人机服务器作为我们的CI环境。我们的源代码是由Github管理的。首先,我在Github上创建了一个oauth应用程序,并获得了client_id和client_secret。然后安装码头和无人驾驶飞机,然后我在/etc/drone/dronerc上做了下面的配置
REMOTE_DRIVER=github
REMOTE_CONFIG=https://github.com?client_id=XXXXXX&client_secret=XXXXXX
DATABASE_DRIVER=sqlite3
DATABASE_CONFIG=/var/lib/drone/drone.sqlite然后,我按照命令运行,启动无人驾驶码头集装箱:
sudo docker run \
--volume /var/lib/drone:/var/lib/drone \
--volume /var/run/docker.sock:/var/run/docker.sock \
--env-file /etc/drone/dronerc \
--restart=always \
--publish=80:8000 \
--detach=true \
--name=drone \
drone/drone:0.4我访问浏览器上的无人机链接,我可以看到一个登录按钮。如下所示。

当我单击登录按钮时,我的回调url将收到以下错误消息的通知:
error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.下面是Github回调url的服务器代码:
get '/oauth/authorize' do
# get temporary GitHub code...
session_code = request.env['rack.request.query_hash']['code']
# ... and POST it back to GitHub
result = RestClient.post('https://github.com/login/oauth/access_token',
{:client_id => CLIENT_ID,
:client_secret => CLIENT_SECRET,
:code => session_code},
:accept => :json)
# extract the token and granted scopes
access_token = JSON.parse(result)['access_token']
redirect 'http://10.0.0.24/'
end在上述代码的最后一行中,重定向地址是无人驾驶飞机服务器地址。我可能在OAuth身份验证部分做了错误的事情,但我不知道如何正确地做到这一点。有谁知道如何实现这部分,以允许无人机进入我的Github帐户?
谢谢
发布于 2016-12-13 16:09:24
在GitHub中创建无人机应用程序时,应该将重定向url字段设置为类似于http://hostname.com/authorize的内容。
在执行oauth流时,无人驾驶飞机向redirect_url提供一个GitHub查询参数,指示成功登录后向何处重定向。下面的错误消息提示redirect_url查询参数不匹配在GitHub中配置的内容
The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application
来自github文档
如果您提供的redirect_uri与您在应用程序中注册的内容不匹配,GitHub将重定向到已注册的回调URL,并使用以下参数总结错误
注意,这些值必须是完全匹配的。即使是简单的http与https不匹配也会导致错误。
Ruby代码的用途有点不清楚,因为无人驾驶飞机是用Go编写的。因此,不幸的是,我不能对此发表评论。
我可以说,最常见的错误是不正确地配置重定向url,或者在反向代理后面运行无人驾驶飞机,而不按文档配置X-Forwarded-For和X-Forwarded-Proto。当在反向代理后面运行时,无人机使用这些值来确定自己的URL,然后在设置redirect_url值时使用该URL。
https://stackoverflow.com/questions/41095473
复制相似问题