微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

现在已经和它斗争了一段时间,不知道它为什么不起作用.

要点是将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然后崩溃消失但我没有到用户#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,还要熟悉Warden代码,并且需要在不同的地方编写很多样板代码,因此我开始研究如何使自定义变得更容易设计并提出这个宝石devise_custom_authenticatable.你可以检查它,它可能会以不同的方式解决你的问题.这个gem在生产代码库中用于相当繁忙的应用程序,所以它经过验证:)

原文地址:https://www.jb51.cc/ruby/268203.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐