Rails 6 devise_ldap_authenticatable позволяет сохранять дублирующихся пользователей с разной капитализацией - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь сделать так, чтобы devise_ldap_authenticatable создавал только одну запись на пользователя, учитывая имя пользователя при входе в систему. У меня возникла проблема: devise_ldap_authenticatable сохраняет то же имя пользователя, но с заглавной буквой. , Нашим пользователям становится неудобно иметь дубликаты пользовательских профилей. Я получаю завершенный 302 найденный только тогда, когда обе записи создаются с именами пользователей в верхнем и нижнем регистре. Как я могу создать только одну запись для каждого пользователя, несмотря на использование заглавных букв для имен пользователей Active Directory?

Если пользователь входит в систему с помощью dwilliams и Dwilliams, новый пользователь не должен создаваться и храниться в базе данных.

user.rb

    class User < ApplicationRecord

    devise :ldap_authenticatable...

    before_save :ldap_before_save

    validates :username, presence: true, uniqueness: {case_sensitive: true}
    extend FriendlyId
    friendly_id :username, use: :slugged

    def ldap_before_save
     self.email = Devise::LDAP::Adapter.get_ldap_param(self.username, "mail").try(:first)
     self.name = Devise::LDAP::Adapter.get_ldap_param(self.username, "name").try(:first)
    end
   end

Журнал Rails

LDAP: LDAP search for login: sAMAccount=dwilliams
LDAP: search yielded 1 matches
LDAP: Requested param mail has value ["dwilliams@econ.com"]
LDAP: LDAP search login: sAMAccountName=dwilliams
LDAP: LDAP search yielded 1 matches
LDAP: Requested param has value ["David Williams"]
(0.4ms) COMMIT
Redirected to 
Completed 302 Found

.....
LDAP: LDAP search for login: sAMAccount=Dwilliams
LDAP: search yielded 1 matches
LDAP: Authorizing user CN=David Williams, OU....
(0.4ms) BEGIN
User Update...
(1.5ms) COMMIT

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Если ничего не получается, вы также можете добавить правила проверки в базу данных бэкэнда, чтобы избежать дублирования значения в столбце имени пользователя. Просто мои два цента

0 голосов
/ 02 мая 2020

Вы должны подтвердить uniqueness с учетом регистра

validates :username, presence: true, uniqueness: { case_sensitive: false }
...