在rails api应用程序中存储会话

时间:2016-03-03 09:12:41

标签: ruby-on-rails ruby session cookies session-cookies

我有一个仅使用rails api的应用程序[config.api_only = true],我通过以下几行启用了cookie:

在application.rb中:

config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Cookies
config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Session::CookieStore

在application_controller.rb

include ActionController::Helpers
include ActionController::Cookies

我还添加了secret_token.rb,如下所示:

Rails.application.config.secret_token = 'token'

在我的控制器中,我试图像这样存储会话:

def index
    #other codes
    session[:userid] = useridstring
    render :text => session[:userid]
end

注意:但是,在chrome中执行此操作后,我正在检查cookie并且没有设置...

然后在同一个控制器中,但在另一个动作中,我试图读取这样的会话:

def readsession
    userId = session[:userid]
    render :text => userId
end

并且没有呈现任何内容.. :(

我错过了什么吗?

我尝试按照here的答案建议我设置config.api_only = false,但结果是一样的(我没有设置cookie,当在另一个控制器中读取时,会话仍然是空的

很抱歉这是一个基本问题(或初始配置问题),我在ruby和rails中仍然很新..

1 个答案:

答案 0 :(得分:6)

由于API始终与客户端无关,因此最好使用令牌进行身份验证。

以下是:

  1. token表格中添加名为users的列。
  2. 用户登录并登录。
  3. 当他登录时,会生成一个令牌(一串随机字符),并保存在数据库中。
  4. 字符串也会传递,任何后续请求都会附带该令牌。
  5. 由于每个请求都附带一个令牌,因此您可以检查令牌是否存在数据库,以及与正确用户的关联。
  6. 当用户注销时,从数据库中删除令牌。