LoginSignup
2
2

More than 5 years have passed since last update.

ActiveDirectoryの日本語ユーザ名(DisplayName)をRailsのDeviseで扱う

Last updated at Posted at 2016-03-19

GYAOの窓際エンジニア 玉利です。

弊社、いままで独自のログオンシステムをつかっており、ActiveDirectoryに関するノウハウがありません。こんなADがらみの仕事をしているのは社内システムの人だけなので、製品開発側の組織の私は毎回地雷を踏むのがお仕事です。

今週は、ちょうどベトナムで作業してました。日本側のユーザーインタビューは日本にいるベテランNさんにお任せです。

私「Nさん、今度のシステム、名前は社内のログイン名でいいですよねー」
Nさん「今使ってる入稿のほうもログイン名だから、いいんじゃないっすかー?」
私「りょーかいっす、前例どおりで」

半日後

Nさん「やっぱり、企画サイドから名前を日本語にしてと言われてしまいました」
私「えー、めんどくさい。。。。言う方は簡単だけどさ。。。。社内的にだれもやってないじゃん」

仕方ないので、資料をあたってみました。コードを製造するのはベトナム人なので、やりかたをこちらであたりを付けてあげるのが私の仕事です。自分で書いたほうが早いとか言ったら、その担当者はインドかベトナム送りにしてあげます。

Deviseだったら日本語名は結構簡単

調べていたら、DisplayNameというパラメーターに日本語の名前が格納されている感じがしました。弊社だけでなくて他所の会社もたぶんここにお名前を入れてるのではないでしょうか?

チケットをこんなふうに書きました。

**[Add] Please show User's JapaneseName(DisplayName) ユーザの日本語化対応** 

Please add User.display_name column.
We will add/store Japanese name here

We try to get ActiveDirectory's DisplayName and set here

https://github.com/cschiewek/devise_ldap_authenticatable

DeviseでLDAP:DisplayNameを拾う

出てきたコードがこちらです。

# User Model
class User < ActiveRecord::Base
  before_save :ldap_email, :ldap_display_name

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :ldap_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable # , :validatable

#中略

  private

  def ldap_email
    ldap_email = Devise::LDAP::Adapter.get_ldap_param(username, 'mail')
    self.email = ldap_email.first unless ldap_email.nil?
  end

  def ldap_display_name
    ldap_display_name = Devise::LDAP::Adapter.get_ldap_param(username, 'displayname')
    self.display_name = ldap_display_name.first.force_encoding('UTF-8') unless ldap_display_name.nil?
  end
end

これで、User.display_nameに日本語の社員名が自動で拾えるようになりました。Railsで業務アプリを作ってる例ってあんまり出てないと思うので、皆様のお役にたてればと思います。

このコードとI18Nの仕組みがあれば、海外オフショアでも普通に日本語ビジネスアプリの開発ができますね。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2