【问题标题】:Adding to / overwriting Devise's current_user method添加/覆盖 Devise 的 current_user 方法
【发布时间】:2013-08-22 09:18:41
【问题描述】:

我有一个用户模型,它有一个关联的密钥持有者和来宾。为了使我的代码更加干燥,我希望 current_user 可以参考: a) 如果用户登录,它将是正常的 Devise current_user 对象。 b) 如果密钥持有人已登录,它将是该密钥持有人的用户 - 即 current_keyholder.user c) 如果访客登录,它将是访客的用户。

我已经尝试将帮助程序添加到应用程序控制器中,但是,这些不能作为例如current_user 在我的代码运行之前没有被初始化。

基本上我想要实现的是:

  def current_user
    if user_signed_in?
      @current_user ||= warden.authenticate(:scope => :user)
    elsif keyholder_signed_in?
      @current_user = current_keyholder.user
    elsif guest_signed_in?
      @current_user = current_guest.user
    end
  end 

上面的代码给了我一个“堆栈级别太深”的错误,但希望能显示我正在尝试的工作。如果有人可以提供帮助,那就太好了,谢谢!

【问题讨论】:

    标签: ruby-on-rails methods devise helpers


    【解决方案1】:

    我找到了一种解决方法 - 在应用程序控制器中,我添加了一个名为 access_user 的 before_filter,然后添加了一个名为 access_user 的方法:

      def access_user
        if user_signed_in?
          @access_user = current_user
        elsif keyholder_signed_in?
          @access_user = current_keyholder.user
        elsif guest_signed_in?
          @access_user = current_guest.user
        end
      end
    

    然后我可以使用例如调用视图<%= @access_user.id %>

    如果有更好的方法或者这会导致一些安全问题,请有人告诉我吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多