今天发现公司的 gitlab 许多人被强制要求开启 2FA ( Two-Factor Authentication ),经过排查发现某个 group 被人不小心设置成所有成员必须开启 2FA,这样所有该 group 的成员都被强制重定向到 2FA 开启页面,除非你开启 2FA 。由于公司某些自动化工具和 2FA 不兼容,而且太麻烦了,这里需要禁用。
我找到了那个 group,在设置里把强制 2FA 关掉了,结果发现还是不行,所有没开启 2FA 的成员还是被强制跳转,提示为:
`The group settings for require you to enable Two-Factor Authentication for your account.`
按照官方的办法停用了所有人的 2FA:
`
https://docs.gitlab.com/ee/security/two_factor_authentication.html`
结果还是不行,我搜了一下 gitlab 文档没有有效信息,意识到这应该是 gitlab 的缓存 bug,重启 gitlab 也没用之后,只有硬着头皮去看源码了。
gitlab 主要业务是 ruby 写的,我先把上面的提示关键字去搜源码,定位到对应的 controller 调用了一个验证 2FA 的逻辑,在:`/opt/gitlab/embedded/service/gitlab-rails/app/controllers/concerns/enforces_two_factor_authentication.rb`文件中。
在该文件中看到了 check_two_factor_requirement 的类方法是负责 check 2FA 的,这里我们注释掉强制验证的代码库,重启 gitlab 就 ok 了。