我很难找到一个关于如何使用authlogic启用单一访问令牌身份验证的简单教程。有一些文档,但它不是很有帮助。
我将single_access_token添加到我的数据库中,我添加了这个:
single_access_allowed_request_types :any
到我的Session类。但我仍然不明白如何使用每次调用传递的凭据参数对用户进行身份验证。我在过滤器之前的require_authentication对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调用时我只是在一个before过滤器中设置当前用户,我感到很困惑。
任何帮助都会很棒!谢谢!
答案 0 :(得分:3)
我唯一需要做的就是
single_access_token
的字段添加到我的users-table 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
我没有在UserSessionsController
或UserSession
对象中添加任何内容。 Authlogic为您处理。使用单访问令牌只验证一个请求,因此不存在持久会话。每个请求都必须发送单访问令牌。因此名称:获得单一访问的令牌:)
希望这有帮助。
答案 1 :(得分:2)
我使用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
答案 2 :(得分:0)
authlogic的源代码是单访问令牌的最佳文档。 This is the specific section that discusses it。
您需要在控制器中添加一个名为single_access_allowed?
的私有方法,您尝试让用户访问该方法。单一访问令牌默认传递为使用名称user_credentials
的URL编码参数。因此,在未登录的情况下点击您的控制器将是/your_route/?user_credentials=xxxxxx