2016-03-03 63 views
2

我有一個Rails API只應用[config.api_only = true]中,我能夠通過以下這些行餅乾:存儲會話中軌API應用

在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 

注:但是,在鍍鉻執​​行此之後,我檢查cookie並沒有設置...

然後在相同的控制器,但在另一個行動,我想讀這樣的對話:

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

,並沒有什麼渲染.. :(

有什麼我錯過了?

我想答案here這表明,我設置config.api_only = false以下,但是結果是一樣的(我沒有設置Cookie,並在另一個控制器讀取時,會話仍然是空的

對不起,這是這樣的。一個基本的問題(或初始配置件事),我依然在Ruby和Rails很新..

+2

支持您的API由主板應用程序使用,那麼該應用程序將如何存儲Cookie?當然,瀏覽器可以使用cookie,但一般的應用程序或API的普通使用者可能無法做到這一點。所以你最好需要使用令牌進行認證。 –

+0

@BilalMaqsood:哦..是的,它是移動的!我沒有想到..我如何使用令牌進行身份驗證呢? :O –

+0

@BilalMaqsood:Cookie確實可以在移動設備上使用,在Android中檢出cookieManager,而NSUrlConnection也可以在iOS中自動處理cookie ..我想知道你如何處理令牌,但我知道解析。com也是這樣做的 –

回答

3

由於一個API始終是客戶端獨立的,所以最好使用令牌認證

方法如下:

  1. users表中添加一個名爲token的列。
  2. 用戶過來並登錄。
  3. 登錄時,生成一個令牌(一串隨機字符),並保存在數據庫中。
  4. 該字符串也被傳遞,並且任何後續請求都將隨該令牌一起提供。
  5. 由於每個請求都帶有一個令牌,因此您可以檢查該令牌是否存在數據庫,並與正確的用戶關聯。
  6. 當用戶註銷時,從數據庫中刪除令牌。
+0

感謝您的解釋!你有這方面的額外資源嗎?我目前使用google搜索,並且對數據庫支持的cookie和認證令牌(也存儲在db中)相當困惑。他們非常類似的概念(您發回一些令牌id),但可能會不同,lol –

+1

一些幾個月前,我構建了一個API,並且我從頭構建了所有的身份驗證功能。這並不困難。而對於你的情況,如果你得到一個不同的令牌ID,只需說出用戶:'你必須登錄才能訪問這個應用程序。'只有有效的令牌,你可以假設用戶已登錄。 –

+0

@HakimHauston如果我的答案幫助了你,你可以接受它。 –