代码之家  ›  专栏  ›  技术社区  ›  Gcap

rails 4-ldap身份验证和无数据库的用户对象

  •  0
  • Gcap  · 技术社区  · 9 年前

    我有一个用户登录的应用程序,LDAP服务器用于对他们进行身份验证。我已经记下了这一部分,但在与用户和多个会话打交道时会出现问题。

    当用户通过身份验证时,我从继承自ActiveModel的用户模型创建一个新的用户对象,并从LDAP条目中保存他们的姓名和电子邮件。这是在中完成的 sessions_controller 用户作为实例变量。即 @user = User.new 然而,当 current_user 在里面 application_controller 检查用户对象,其值为 nil .
    我猜这是一个作用域问题,应用程序控制器无法在会话控制器的值中看到实例变量。

    如果不使用数据库,我如何处理保存关于用户的最小信息并使其在整个会话中保持不变?
    使用类变量之前 @@user 并将其放入 应用程序控制器 其他用户一次只能登录一个。。。

    感谢您的帮助!

    1 回复  |  直到 9 年前
        1
  •  0
  •   Mike Gorski    9 年前

    假设User对象很小,可以将其存储在会话中。

    class SessionController < ApplicationController
      def authenticate
        # Handle LDAP-auth and we now have a user
        #   ldap_authenticated? should be true
        #   ldap_user contains relevant info from LDAP
    
        session[:user] = User.new(email: ldap_user.email) if ldap_authenticated?
      end
    end
    
    
    module ApplicationHelper
      # Use this to access the current user everywhere in the app
      def current_user
        session[:user]
      end
    end