GitLab で LDAP 認証を行う場合、メールアドレスが設定されていないと GitLab 側で勝手にメールアドレスが設定されてしまいます。
きちんとしたメールアドレスが設定されていれば良いのですが、私の会社では Active Directory にメールアドレスが設定されていないので、ドメインを使用したメールアドレスが勝手に設定されます。
一応管理者画面で後から変更できますが、ログインする度に都度上書きされてしまうので、意味がありません。
これを直すには GitLab のソースコードを修正する必要があります。
こちらのサンプルコードを参考に local.rb
というファイルを作成します。
module OmniAuth
module Strategies
class LDAP
class << self
alias_method :map_user_orig, :map_user
end
def self.map_user(mapper, object)
object['mail'] += ["#{object['sAMAccountName'].first}@example.com"]
self.map_user_orig(mapper, object)
end
end
end
end
私の環境では sAMAccountName
を Username としているので、サンプルコードで uid
だった箇所を sAMAccountName
に変更しています。
このファイルを /opt/gitlab/embedded/service/gitlab-rails/config/initializers/
に配置します。
これで、LDAP 認証を行った際に上記で指定したメールアドレスが設定されるようになります。
それにしても、LDAP 認証時にメールアドレスが設定されていなかったら任意のメールアドレスを設定出来るようにとかならないんでしょうかね。
Redmine は確かそんな動作だったと思います。
普通に困ると思うのですが・・・。
Username とメールアドレスの@より前が異なる場合
上記は、Username と メールアドレスの @ より前の部分が同じであるという条件が付きます。
これらが異なる場合は、そのユーザーアカウントに対してメールアドレスを2つ設定する必要があります。
例えば、Username が hoge
で、メールアドレスが piyo@example.com
というような場合です。
この場合、LDAP 認証でログインしたときに hoge@example.com
というメールアドレスが登録されますが、これはログイン用のダミーとして残しておき、実際に通知などで使用するメールアドレスとして piyo@example.com
をユーザーアカウントに追加登録します。
Git のコミットログなどではメールアドレスをキーにしてユーザーを関連付けますが、GitLab 上では、メールアドレスを複数登録した場合はその両方がユーザーの判別に使用されるようです。
詳細は GitLab のメールアドレスの追加ページに書いてあります。