我正在学习Rails(没有Web开发和MVC方面的经验),为了提高我的技能,我想实现一个在LDAP中进行身份验证的应用程序。我一直在阅读Ryan Bigg和RUBY ON RILY ON RAILS TULORIAL的Michael RAl的RAILS 4 IN ACTION。现在,在这些教程中,开发的应用程序需要一个身份验证系统。他们从头开始构建身份验证系统。由于用户名/密码保存在数据库中,因此它们会生成用户模型。我的问题是,如果我在LDAP中保存用户数据(并通过LDAP进行身份验证),我是否需要生成用户模型?用户模型还用于保存cookie(记住用户会话)。这是否意味着我应该生成用户模型但只保存会话数据?任何指针都会受到赞赏。
答案 0 :(得分:1)
您当然不需要创建继承自ActiveRecord::Base
类的模型,但是有一些类来保存用户信息是合适的 - 即使它只是在运行时间内。或者你真的只想进行身份验证然后忘记用户吗?
如果您有兴趣将LDAP与事实上的标准Rails gem用于身份验证 - 设计,请查看此Wiki页面https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP。
您只需使用自定义身份验证策略即可。
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 = [YOUR LDAP HOSTNAME]
ldap.port = [YOUR LDAP HOSTNAME PORT]
ldap.auth email, password
if ldap.bind
user = User.find_or_create_by(email: email) #optional lookup
success!(user) # you do have to return some object
else
fail(:invalid_login)
end
end
end
def email
params[:user][:email]
end
def password
params[:user][:password]
end
end
end
end
Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
如果你想避免使用设计,请去warden-ldap https://github.com/renewablefunding/warden-ldap。