【问题标题】:Authlogic and Single Access TokenAuthlogic 和单一访问令牌
【发布时间】:2011-10-26 17:03:22
【问题描述】:

我很难找到有关如何使用 authlogic 启用单一访问令牌身份验证的简单教程。有一些文档,但它不是很有帮助。

我在我的数据库中添加了 single_access_token,我添加了这个:

  single_access_allowed_request_types :any

到我的 Session 课程。但我仍然不明白如何使用通过每次调用传递的凭据参数对用户进行身份验证。我的 require_authentication before filter 像这样对 current_user 进行标准检查:

 def current_session
    return @current_session if @current_session
    @current_session = Session.find
  end

  def current_user
    @current_user = current_session && current_session.record
  end

但这足以工作吗? Session.find 方法是否会根据我的参数有效地记录用户,或者我是否必须创建单独的方法来实际检查 user_credentials 参数是否存在,然后根据它找到用户,然后登录该用户。如果我真的在每次使用 SAT 时“创建”一个新会话,或者我只是在每次进行 API 调用时将当前用户设置在前过滤器中,我都会感到困惑。

任何帮助都会很棒!谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 authlogic


    【解决方案1】:

    我使用 authlogic 实现了一个 single_access_token 解决方案,我要做的就是将 single_access_allowed_request_types :all 添加到 UserSession 模型中。

    然后我将以下内容添加到我想要允许 single_access_token 身份验证的控制器中。

      def single_access_allowed?
          ["some_action_1","some_action_2","some_action_3"].include?(action_name)
      end
    

    您似乎缺少控制器代码。所以如果你有两个动作“get_user_info”和“update_user_info”你会添加。

      def single_access_allowed?
          ["get_user_info","update_user_info"].include?(action_name)
      end
    

    【讨论】:

    • 丹尼尔,这行得通吗?如果不让我知道您遇到了什么问题,我会尽力提供帮助。谢谢!
    • 如果你只需要生成single_access_token,例如如果你想用update_column设置它以避免任何回调,你可以使用Authlogic::Random.friendly_token。请注意,如果 Authlogic 更改了这一点,您将需要更新您的代码。
    【解决方案2】:

    完成这项工作我唯一要做的就是

    • 在我的用户表中添加一个名为 single_access_token 的字段
    • 将一个名为single_access_allowed? 的方法添加到应允许单次访问的每个控制器。

    这个方法看起来像这样:

    # method for authlogic: defines for which action the single-access-token can be used
    def single_access_allowed?
      (action_name == "deliver") || (action_name == "delivery_status")
    end
    

    我不必在 UserSessionsControllerUserSession 对象中添加任何内容。 Authlogic 为您处理。使用单一访问令牌时,只有一个请求经过身份验证,因此不存在持久会话。每个请求都必须发送单一访问令牌。因此名称:获得单一访问权的令牌:)

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      authlogic 的源代码是关于单一访问令牌的最佳文档。 This is the specific section that discusses it

      您需要在试图让用户访问的控制器中添加一个名为 single_access_allowed? 的私有方法。默认情况下,单一访问令牌作为 URL 编码参数使用名称 user_credentials 传递。所以在不登录的情况下点击你的控制器将是/your_route/?user_credentials=xxxxxx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-26
        • 2011-12-31
        • 2018-06-14
        • 2019-03-22
        • 1970-01-01
        • 2011-03-26
        • 2020-03-10
        • 1970-01-01
        相关资源
        最近更新 更多