使用Ruby通过API访问GitLab

时间:2018-10-01 20:43:47

标签: ruby gitlab-api

尝试通过API首次访问我大学的GitLab(我是仓库的所有者,但无法访问控制台,无法编辑配置文件或重新启动服务器),我似乎缺少一些必修的基础知识。尝试将Ruby(无轨)与Narkoz API包装器一起使用。不幸的是,没有可用的教程可以解释第一步:

如何使用UID + passwd连接到服务器并进行身份验证?

有人可以用易于理解的说明来解释该过程吗? GitLab Manual对我没有帮助。

我希望我能弄清楚如何将GitLab用户添加到我的存储库。不想使用Web界面添加100个用户。

2 个答案:

答案 0 :(得分:1)

您链接的手动输入用于使用第三方OAuth提供程序登录GitLab,这听起来不像您要执行的操作。听起来您想做的是request an OAuth token,然后可以使用它来访问GitLab的API。

从文档中:

  

在此流程中,请求令牌以换取资源所有者凭证(用户名和密码)。仅当资源所有者和客户端之间存在高度信任时(例如,客户端是设备操作系统的一部分或高度特权的应用程序),并且其他授权授予类型不可用时,才应使用凭据。作为授权码)。

听起来像您想要做的事。

文档中需要注意的重要一件事:

  

弃用注意事项:从GitLab 8.11开始,已针对启用了双重身份验证的用户禁用了资源所有者密码凭证。这些用户可以改用personal access tokens访问API。

在这种情况下,以下操作将无效,而您需要生成访问令牌。

  

1。请求访问令牌

     

向/ oauth / token发送带有参数的POST请求:

{
  "grant_type"    : "password",
  "username"      : "user@example.com",
  "password"      : "secret"
}
     

然后,您将在响应中返回访问令牌:

{
  "access_token": "1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa",
  "token_type": "bearer",
  "expires_in": 7200
}

然后,您将此令牌分配为您的GitLab.private_token

答案 1 :(得分:0)

出于记录目的-最快可以帮助您的是一个最小的可行示例-尤其是因为API文档包含已知的而非固定的错误。

host = myGitlabServer

require 'oauth2'
client = OAuth2::Client.new(clientIdFromGitLab, clientSecretFromGitLab, :site => host)
accessToken = client.password.get_token(myGitLabUid, myGitLabPassword)

require 'httparty'
# get own user data
response = HTTParty.get(host + '/api/v4/user?access_token=' + accessToken.token)
puts response.parsed_response

# get user data by user name
response = HTTParty.get(host + '/api/v4/users?username=' + username + '&access_token=' + access_token.token)
puts response.parsed_response[0]

# add user as reporter to project
response = HTTParty.post(host + '/api/v4/projects/' + projectId + '/members/?user_id=' + newUID + '&access_level=20&access_token=' + access_token.token)
puts response.parsed_response