2017-01-20 81 views
3

我對每個HTTP請求運行此代碼:緩存API的用戶憑據

if ($request->header('Authorization')) { 
    $token = $request->header('Authorization'); 
    $user = User::where('api_token', $token)->whereRaw("`api_token_expires` >= CURDATE()")->active()->first(); 
    if ($user) { 
     $GLOBALS['user_id'] = $user->id; 
     $GLOBALS['is_admin'] = $user->admin; 
     return $next($request); 
    } 
} 

正如你所看到的,我打了尋找一個有效的API令牌每個請求的數據庫。

什麼是更有效 - 但安全,最佳實踐 - 處理這種方式?我應該看看MySQL緩存嗎? Redis還是別的?

編輯:我沒有使用會話,這是一個無狀態的API。

+0

最好的方法是使用redis來加快訪問速度。休息一切都很好。這取決於你會收到的命中,如果流量較少mysql是好的 – Bugfixer

回答

0

您可以先讓api用戶授權,並使用會話令牌進行響應。

然後他們可以使用此會話令牌爲每個下一個請求。

您可以將這些會話存儲在$ _SESSION變量,磁盤上的文件或Redis等快速數據庫中。

爲了安全地做到這一點,我會自動刪除舊會話,檢查會話令牌對其原始IP,並強制https的API。

+0

我根本不使用會話 - 這實際上是流明,它是一個無狀態的API。 – daninthemix

+0

啊,那麼你可能想看看這個: http://stackoverflow.com/questions/2641901/how-to-manage-state-in-rest –