我用Rails 7 + device + device_ldap_authenticatable编写了一个应用程序
我的用户模型如下所示。
class User < ApplicationRecord
devise :ldap_authenticatable
before_save :get_from_ldap
def get_from_ldap
puts '1 ##########################################'
self.username = <WHAT EVER CODE>
puts '2 ##########################################'
end
end
字符串
这可以完美地工作,但只有一次。第一次,当用户在第一次登录后被创建到数据库中时。
我不确定,但我认为这与一些 * device_ldap_authenticatable* 指令有关,因为before_保存通常被调用为始终正确?
config.ldap_create_user = true
型
我做错了什么?
我想在每次用户登录时使用某种方法或技术来完成此操作,以确保我从Active Directory中获得所有更改。
谢谢.
更新#:
我试过使用 before_validation 和 after_validation,所有这些回调都只调用一次。用户第一次登录时被创建到数据库中。这不是正常的权限?你知道吗?
我的设计.rb
# ==> LDAP Configuration
config.ldap_logger = true
config.ldap_create_user = true
config.ldap_update_password = false
config.ldap_config = "#{Rails.root}/config/ldap.yml"
config.ldap_use_admin_to_bind = true
# config.ldap_ad_group_check = false
# Sin esta linea trata de buscar por mail en vez de por el atributo definido en
# config.ldap_config = "#{Rails.root}/config/ldap.yml"
#
# https://stackoverflow.com/questions/44121543/rails-devise-ldap-authentication-cannot-find-user
#
config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| login}
型
我的LDAP,yml
## Authorizations
authorizations: &AUTHORIZATIONS
allow_unauthenticated_bind: false
development:
host: 13.0.0.1
port: 389
attribute: userPrincipalName
group_membership_attribute: member
base: dc=mydomain,dc=net
admin_user: cn=Admin,ou=Users,ou=first,dc=mydomain,dc=net
admin_password: ***********
ssl: false
# <<: *AUTHORIZATIONS
型
1条答案
按热度按时间hpcdzsge1#
好吧。回调函数只在保存时调用(当然)。在我的用例中,这只在创建每个用户时的第一次登录时调用。Nexts登录从不更新DB,所以保存从不被调用。
为了解决这个问题,我想了一个方法来强制更新。
Devise trackable模块是我的解决方案。感谢How do I add trackable to an existing Devise setup?
如果我将**:trackable**添加到User模型中,则每次登录都会调用回调。
字符串