Redmine 插件:使用 Gitlab 账号登录

2016-09-18  籽藤 

这两天在家写了个 Redmine 插件,在redmine 3.3 stable版本上亲测有效。源码地址https://github.com/applewu/redmine_omniauth_gitlab

准确地说,我是改写了redmine_omniauth_google插件,来实现redmine_omniauth_gitlab的。但是我之前没有啃过Ruby代码,对Redmine源码结构也不了解,所以还是遇到不少坑的。 想写下一些东西,以作纪念。

插件用途

实现用Gitlab账号登录Redmine系统的功能。

背景

实现Gitlab与Redmine集成的方式,可以分为以下有几种:

  • 使用Redmine来替代Gitlab自带的IssueTrack

  • 将Gitlab作为OauthClient,向Redmine请求授权。即用Redmine账号访问Gitlab

  • 将Redmine作为OauthClient,向Gitlab请求授权。即用Gitlab账号访问Redmine

再来说说我们团队。

公司近百人了,随着研发团队逐渐壮大,我们需要一个项目管理系统,便于跨部门沟通。最开始用于项目管理的Trello,已经不能满足需求了。Jira又太重,研发团队的流程意识还没有完全建立起来,我们倾向于使用开源免费的。于是,我们想到已经在团队中使用了将近两年的Bug管理系统Redmine,用它来管理整个产品。Redmine  一开始只是是技术支持、开发和测试团队在用。后来,为了适应跨部门沟通(包括,市场,产品等团队),我们做了很多自定义的调整。因此,Redmine已经不是简单的IssueTrack了,我们需要为Redmine增加第三方登录的功能。作为Redmine管理员,我理所当然地完成了第三种方式。前两种是Gitlab管理员的活儿:)

插件原理

理解Oauth原理是最重要的。Redmine首先需要在Gitlab中注册,获得ApplicationId和Secret。用户在Redmine上选择使用Gitlab账号登录时,Redmine会向 Gitlab 发起验证请求。如果用户登录了 Gitlab,并授权允许了,Gitlab会分配一个code给Redmine的回调地址;如果用户当前没有登录 Gitlab,则会要求登录。随后,Redmine再次将code作为参数的一部分,向Gitlab发起获取AccessToken的请求。Redmine 有了访问 Gitlab 的权限之后,就可以获取用户邮箱等信息了。

简而言之,会用到 Gitlab 的三个接口:

  • /oauth/authorize

  • /oauth/token

  • /api/v3/user

随便找一份 Gitlab Oauth Client 的文章,就有详细的过程。中文教程参见:

http://afoo.me/posts/2015-12-17-create-a-gitlab-oauth2-application.html

566°|5650 人阅读|1 条评论

小窝  2016-09-18

大赞

登录 后发表评论