【问题标题】:Sinatra with Rails reset session every requestSinatra 与 Rails 重置会话每个请求
【发布时间】:2012-12-03 04:11:21
【问题描述】:

我有一个 Rails Web 应用程序,我需要为移动客户端创建 API。我为此选择了一个 Sinatra Web 框架。但是我的 Sinatra 应用程序有问题,每次请求后所有数据会话都丢失了。 我的 API 看起来像这样(lib/api/core.rb):

module Api
  class Core < Sinatra::Base
    set :session_secret, 'secret'
    enable :sessions

    get '/foo' do
      content_type :json
      session['foo'] = 'some value'
    end

    get '/bar' do
      content_type :json
      session['foo']#everytime is nil
    end

  end
end

在我的 route.rb 中我写了这个:

constraints :subdomain => 'api' do
  mount Api::Core => '/'
end

我使用 Rails 3.2.8,Sinatra 1.3.3

我的问题是如何在请求之间存储数据(需要我进行身份验证)?

【问题讨论】:

  • 你同时使用 Rails 和 Sinatra?
  • 是的,Rails 用于我的主要 Web 应用程序,Sinatra 用于 API

标签: ruby-on-rails ruby session sinatra


【解决方案1】:

您的 API 应该是无状态的。身份验证通常使用随每个请求一起发送的令牌来完成。请参阅 RailsCast #352 Securing an API 了解更多信息。

【讨论】:

  • 我知道令牌认证,我会使用它。但我需要为每个令牌存储用户 ID,因为我将在查询中使用它。
  • 我不确定那是问题所在。您有一个无状态 API,每次收到请求时,您都会根据提供的令牌 (User.find_by_token(params[:token]) 找到用户并做事。
猜你喜欢
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2015-11-13
  • 2015-06-10
  • 2023-03-12
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多