-
Notifications
You must be signed in to change notification settings - Fork 24
LDAP
Kosuke Tanabe edited this page Jun 19, 2022
·
10 revisions
devise_ldap_authenticatable gemを用いたLDAP認証の設定方法です。
-
Gemfileに以下の行を追加します。
gem 'devise_ldap_authenticatable'
-
gemのインストールを行います。
bundle install
-
Dockerイメージをビルドします。
docker compose build
-
LDAP認証の設定ファイルの作成を行います。
rails g devise_ldap_authenticatable:install
-
app/models/user.rb
に、以下の行が含まれていることを確認します。devise :ldap_authenticatable,
-
LDAPサーバのバインド情報を、
config/ldap.yml
に追加します。production: host: localhost port: 389 attribute: uid # ユーザ名に使用する属性 base: ou=people,dc=test,dc=com admin_user: cn=admin,dc=test,dc=com admin_password: admin_password ssl: simple_tls
-
サインイン時にアカウントを自動作成したい場合、
config/initializers/devise.rb
を以下のように変更します。Devise.setup do |config| # ==> LDAP Configuration # config.ldap_logger = true # 認証ログを出力する場合はこの行のコメントを解除 config.ldap_create_user = true # コメント解除 # config.ldap_update_password = true
-
サインイン時にLDAPサーバからメールアドレスを取得して保存したい場合、
ldap_before_save
メソッドをapp/models/user.rb
に追加します。class User < ApplicationRecord # 中略 def ldap_before_save # mail属性にメールアドレス、cn属性に氏名が保存されているものとする self.email = Devise::LDAP::Adapter.get_ldap_param(username, "mail").first return unless new_record? self.profile = Profile.new( required_role: Role.find_by(name: 'Librarian'), full_name: Devise::LDAP::Adapter.get_ldap_param(username, "cn").first, # 既定のuser_groupとlibraryは各自の環境にあわせて変更すること user_group: UserGroup.find_by(name: 'first_group'), library: Library.find_by(name: 'web'), ) # 既定ではUser権限でユーザアカウントを作成 self.role = Role.find_by(name: 'User') # その他、LDAPでのサインイン時に行いたい処理がある場合、このメソッド内に記述する end end
-
アプリケーションを再起動します。