我有一个Rails应用程序,它依赖于第三方应用程序进行身份验证。首次使用one_time_token并与第三方进行身份验证。成功后,将设置带有第三方应用程序名称的会话
session['third_party_session_id'] = 'xxxxxxxxxxxxxxxxxxgddddddddddddd'
以上情况发生在before_action
before_action :authenticate
对于其他每个动作,将调用相同的before_action。但由于现在我们拥有third_party_session_id,因此可以使用third_party_session_id进行身份验证。
所以方法看起来像这样
def authenticate
if params[:one_time_token]
//authenticate using one time token and set session
elsif session['']
//authenticate using session id
else
//unauthorized
end
end
这在没有安全的情况下可以正常工作:session_store.rb中为true
当我添加安全性时:session_store.rb中为true,
Rails.application.config.session_store :cookie_store, key: 'third_party_session_name', secure: true
一次身份验证成功。在下一个请求
预期的行为:应该存在session ['third_party_session_id']并且身份验证应该成功 实际行为:会话为零
以上内容在http环境中进行了测试。在这里,即使cookie不安全,也不应使会话无效,这是我期望的。