我的网站是一个与rails api交互的单页rails应用程序。我最近添加了一个api端点,允许用户通过ajax注销。
class Api::SessionsController < Api::ApplicationController
...
# DELETE /api/sessions/destroy
def destroy
session.delete(:user_id)
render json: { success: true }
end
...
end
此端点工作正常,直到我更改会话存储以在用户退出浏览器时保持会话。
config/initializers/session_store.rb
差异:
AppName::Application.config.session_store :cookie_store,
- key: session_key, domain: TOP_LEVEL_DOMAIN
+ key: session_key, domain: TOP_LEVEL_DOMAIN, expire_after: 1.month
现在,在通过ajax点击我的sessions#destroy
端点后,重新加载页面会将用户重新登录,并且会话中仍然有user_id。
我的猜测是浏览器的cookie没有被DELETE
ajax请求覆盖(就像我在添加expire_after参数之前那样),但这很难验证,因为存储的cookie是加密的。 / p>
有没有人有任何解决方案或调试路径?
有谁知道这里发生了什么?
答案 0 :(得分:0)
当您设置:expire_after
以设置Cookie的到期时,即使浏览器关闭,它也会导致Cookie持续到给定日期。这意味着当您在Rails会话中更改某些内容时,您必须更新cookie 。最简单的方法是重新创建cookie。