2017-01-20 28 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のキャッシュを調べるべきですか?レディスか他の何か?

EDIT:私はセッションを使用していませんが、これはステートレスAPIです。

+0

できるだけ早くアクセスするためにredisを使用することをお勧めします。すべてを休むことは大丈夫です。トラフィックが少ない場合に受信するヒット数に依存します。mysqlは大丈夫です – Bugfixer

答えて

0

api-usersを最初に承認し、セッショントークンで応答させることができます。

次に、次のリクエストごとにこのセッショントークンを使用できます。

これらのセッションは、$ _SESSION変数、ディスク上のファイル、またはRedisのような高速データベースに格納できます。

これを安全に行うには、古いセッションを自動的に削除し、元のIPに対してセッショントークンを確認し、apiに対してhttpsを強制します。

+0

セッションはまったく使用していません。これは実際にはルーメンであり、ステートレスなAPIです。 – daninthemix

+0

ああ、これを見てみるといいでしょう: http://stackoverflow.com/questions/2641901/how-to-manage-state-in-rest –

関連する問題