使用Ruby通过API访问GitLab

使用Ruby通过API访问GitLab,ruby,gitlab-api,Ruby,Gitlab Api,第一次尝试通过API访问我所在大学的GitLab(我是repo所有者,但无法访问控制台,无法编辑配置文件或重新启动服务器),我似乎缺少一些必需的基础知识。尝试将Ruby(无rails)与Narkoz API包装一起使用。遗憾的是,目前没有任何教程可以解释第一步: 如何连接到服务器并使用UID+passwd进行身份验证 有人能用可读的指令来解释这个过程吗?这对我没有帮助 我希望接下来我能弄清楚如何将GitLab用户添加到我的存储库中。不希望使用web界面添加100个用户。您链接的手动条目用于与第三

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

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

有人能用可读的指令来解释这个过程吗?这对我没有帮助


我希望接下来我能弄清楚如何将GitLab用户添加到我的存储库中。不希望使用web界面添加100个用户。

您链接的手动条目用于与第三方OAuth提供商登录GitLab,这听起来不像您要做的。听起来您正在尝试做的是,您可以使用它访问GitLab的API

从文件中:

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

听起来像是你想做的

文档中需要注意的一个重要事项是:

弃用通知:从GitLab 8.11开始,已为启用双因素身份验证的用户禁用资源所有者密码凭据。这些用户可以使用来访问API

如果您是这种情况,那么以下操作将不起作用,您将需要生成一个访问令牌

1.请求访问令牌 使用参数向/oauth/token发送请求:

{
  "grant_type"    : "password",
  "username"      : "user@example.com",
  "password"      : "secret"
}
然后,您将在响应中接收回访问令牌:

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

然后将此令牌指定为您的
GitLab.private_令牌

您链接的手动条目用于与第三方OAuth提供商登录GitLab,这听起来与您尝试的操作不同。听起来您正在尝试做的是,您可以使用它访问GitLab的API

从文件中:

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

听起来像是你想做的

文档中需要注意的一个重要事项是:

弃用通知:从GitLab 8.11开始,已为启用双因素身份验证的用户禁用资源所有者密码凭据。这些用户可以使用来访问API

如果您是这种情况,那么以下操作将不起作用,您将需要生成一个访问令牌

1.请求访问令牌 使用参数向/oauth/token发送请求:

{
  "grant_type"    : "password",
  "username"      : "user@example.com",
  "password"      : "secret"
}
然后,您将在响应中接收回访问令牌:

{
  "access_token": "1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa",
  "token_type": "bearer",
  "expires_in": 7200
}
然后将此令牌指定为记录的
GitLab.private_令牌

,这是一个最简单可行的示例,尤其是因为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
对于记录来说,一个最简单可行的例子可能会有助于加快速度,特别是因为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

谢谢你的帮助!尝试使用rest客户端gem:
parameters=“grant\u type=password&username=MyUserName&password=MyPassword”
但是
RestClient.post'https://My.GitLab.Server/oauth/token,参数只返回代码200,而不是访问令牌。幸运的是,在服务器上注册了一个应用程序之后,我成功地使用了所描述的使用oauth2 gem的方法。奇怪的你必须有注册申请吗?我不知道。服务器的响应为200表示您的请求成功。响应主体将具有访问令牌。感谢您的帮助!尝试使用rest客户端gem:
parameters=“grant\u type=password&username=MyUserName&password=MyPassword”
但是
RestClient.post'https://My.GitLab.Server/oauth/token,参数只返回代码200,而不是访问令牌。幸运的是,在服务器上注册了一个应用程序之后,我成功地使用了所描述的使用oauth2 gem的方法。奇怪的你必须有注册申请吗?我不知道。服务器的响应为200表示您的请求成功。响应主体将具有访问令牌。