2014-05-14 42 views
3

試圖構建和基於laravel的API,旨在發展到許多客戶激烈使用。我的問題是在我的代碼中使用Auth類是否存在嚴重的缺陷? 我已經實現了的OAuth2授權,並獲得有關正在請求的用戶信息,我有一個過濾器:Laravel API Auth類的使用情況

Route::filter('hasAccess', function($request) 
{ 
     //get the cleaned token string 
     $auth_code = Request::header('Authorization'); 
     $auth_code = trim(preg_replace('/Bearer/sui', "", $auth_code)); 
     //get the stored session and put the query in cache for 10 minutes 
     $ts = DB::table('sessions as s') 
       ->leftJoin('oauth_session_access_tokens as osat', 's.token', '=', 'osat.id') 
       ->select('s.*') 
       ->where('osat.access_token', '=', $auth_code) 
       ->remember(10, $auth_code) 
       ->first(); 
     //Auth user cross-app 
     Auth::onceUsingId($ts->user); 
     //Extract the requested action 
     $request = $request->getAction(); 
     $request = $request['controller']; 
     $parts = explode('@', $request); 
     $required = strtolower($parts[0]).'.'.$parts[1]; 
     $required = preg_replace('/controller/sui', "", $required); 
     //Get the permissions 
     $permissions = json_decode($ts->permissions, true); 
     $permissions = array_fetch($permissions,'name'); 
     if (!in_array($required,$permissions)) 
     { 
      return Response::json([ 
        'error' => true, 
        'dataset' => 'You don\'t have rights to access this url' 
      ]); 
     } 



}); 

它驗證用戶訪問權限的控制作用,但最有趣的是該行與Auth::onceUsingId($ts->user);。這些行僅授予用戶1個請求。此外,如果有其他方式獲取有關用戶的信息,請提及它們。謝謝

+0

你在問什麼?如果您必須爲每個請求驗證用戶身份? – Laurence

+0

不完全。我想知道是否有嚴重的性能或任何其他缺點,當服務將被許多客戶端使用..例如10K,20K ..等等。所以我想知道我可能遇到的問題。此外,我想知道,如果這是讓我的應用程序中的任何地方發出請求的用戶的好方法。 –

回答

1

你談論使用Auth類代碼的'嚴重缺點' - 但是你沒有真正解釋與什麼相比的缺點?只需手動在數據庫中查找自己的用戶?

所有Auth::onceUsingId()正在做的是將您的用戶登錄到沒有會話或cookie的應用程序中。這對於API來說非常完美 - 因爲通常在請求之間不會持久化。

然後,您可以執行Auth::user()以獲取有關用戶的數據,例如Auth::user()->name

+0

我的意思是性能問題和任何其他與代碼之美沒有關係。但是,你的答案似乎讓我覺得這個應用程序沒問題。謝謝。 –