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

Hak*_*ton 4 ruby cookies session ruby-on-rails session-cookies

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

在application.rb中:

config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Cookies
config.middleware.insert_after ActionDispatch::ParamsParser, ActionDispatch::Session::CookieStore
Run Code Online (Sandbox Code Playgroud)

在application_controller.rb中

include ActionController::Helpers
include ActionController::Cookies
Run Code Online (Sandbox Code Playgroud)

我还添加了secret_token.rb如下:

Rails.application.config.secret_token = 'token'
Run Code Online (Sandbox Code Playgroud)

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

def index
    #other codes
    session[:userid] = useridstring
    render :text => session[:userid]
end
Run Code Online (Sandbox Code Playgroud)

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

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

def readsession
    userId = session[:userid]
    render :text => userId
end
Run Code Online (Sandbox Code Playgroud)

什么都没有呈现.. :(

我错过了什么吗?

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

对不起,这是一个基本的问题(或初始配置问题),我仍然是ruby和rails的新手..

Ars*_*Ali 7

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

这是如何做:

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