【问题标题】:Authlogic HTTP Basic UserSession.find returns nil, means declarative_authorization can't get a current_userAuthlogic HTTP Basic UserSession.find 返回 nil,表示 declarative_authorization 无法获取 current_user
【发布时间】:2013-08-09 18:56:05
【问题描述】:

当使用 Authlogic 的 HTTP 基本身份验证时,UserSession.find 返回 nil,因为会话似乎没有设置。结果,引用了通常的 current_user 方法(如下)的 declarative_authorization 找不到当前用户。

def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
end

def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
end

是否可以在用户通过 HTTP basic 进行身份验证时创建会话(即使该会话只会持续到请求关闭)还是有更好的方法?

【问题讨论】:

  • 在进行设计之后,我遇到了完全相同的问题。使用 HTTP 基本认证,current_user 为 nil

标签: ruby-on-rails authlogic declarative-authorization basic-authentication


【解决方案1】:

碰到这个。我遇到了同样的问题(使用相同的宝石 - authlogic + declarative_auth)。

为我找到了解决方案,我只需将以下代码复制到 authorization_rules.rb 的末尾

privileges do
  privilege :manage, :includes => [:create, :read, :update, :delete]
  privilege :read, :includes => [:index, :show]
  privilege :create, :includes => :new
  privilege :update, :includes => :edit
  privilege :delete, :includes => :destroy
end

【讨论】:

  • 我不认为这是同一个问题。我的确实与授权无关,但 authlogic 没有返回 current_user 对象。
【解决方案2】:

摆弄了设计,现在一切似乎都在工作,只要在使用 ActiveResource 时我做 site = "http://user:password@domain",而不是:

site = "http://domain"
username = "user"
password = "password"

这不起作用。我还没有花时间去探究原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多