gpt4 book ai didi

ruby-on-rails - 创建自定义设计策略

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:28 31 4
gpt4 key购买 nike

现在已经为此奋斗了一段时间,不确定为什么它不起作用。

要点是希望将 Devise 与 LDAP 结合使用。除了身份验证外,我不需要做任何事情,所以除了自定义策略外,我不需要使用任何东西。

我根据 https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP 创建了一个据我所知,一切都应该正常工作,除了每当我尝试运行服务器(或 rake 路由)时,我得到一个 NameError

lib/devise/models.rb:88:in `const_get': uninitialized constant Devise::Models::LdapAuthenticatable (NameError)

我已将错误追溯到我的 app/models/user.rb

class User < ActiveRecord::Base
devise :ldap_authenticatable, :rememberable, :trackable, :timeoutable
end

如果我删除 :ldap_authenticatable 那么崩溃就会消失,但我没有到 user#session 的路由并且无法访问登录提示。

我的支持文件:

lib/ldap_authenticatable.rb

require 'net/ldap'
require 'devise/strategies/authenticatable'

module Devise
module Strategies
class LdapAuthenticatable < Authenticatable

def authenticate!
if params[:user]
ldap = Net::LDAP.new
ldap.host = 'redacted'
ldap.port = 389
ldap.auth login, password

if ldap.bind
user = User.where(login: login).first_or_create do |user|
success!(user)
else
fail(:invalid_login)
end
end
end

def login
params[:user][:login]
end

def password
params[:user][:password]
end

end
end
end

Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)

最后,在 config/initializers/devise.rb

Devise.setup do |config|
# ==> LDAP Configuration
require 'ldap_authenticatable'
config.warden do |manager|
manager.default_strategies(:scope => :user).unshift :ldap_authenticatable
end
end

我已经用尽了我的搜索,也许有人能看到我遗漏的东西。

干杯

最佳答案

您的 lib/ldap_authenticatable.rb 是在自动加载路径中还是明确要求?由于默认情况下不再自动加载 lib 文件夹中的 Rails 3 代码。这是关于如何 solve it 的一种方法

恕我直言,Devise 是一颗伟大的 gem 。然而,为了编写自己的策略,您不仅要熟悉 Devise,还要熟悉 Warden。还有源代码,很多样板代码需要在不同的地方编写,所以我开始研究如何使 Devise 的定制更容易,并想出了这个 gem devise_custom_authenticatable .您可以检查它,它可能会以不同的方式解决您的问题。这个 gem 在生产代码库中用于相当繁忙的应用程序,所以它经过了战斗验证:)

关于ruby-on-rails - 创建自定义设计策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374187/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com