2014-05-14 5 views
3

laravel을 기반으로 API를 빌드하고 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);의 행 이 행은 사용자에게 단 하나의 요청 만 권한을 부여합니다. 또한 사용자에 대한 정보를 얻는 다른 방법이 있다면 언급하십시오. 감사합니다

+0

무엇을 묻는 중입니까? 요청할 때마다 사용자를 인증해야합니까? – Laurence

+0

아닙니다. 나는 서비스가 클라이언트의 제비에 의해 소비 될 때 심각한 perfomance 또는 다른 어떤 결점이 있는지 알고 싶다. 예를 들면 10k, 20k .. 등등. 그래서 나는 나가 가지고있을 수있는 가능한 문제점을 알고 싶다 . 또한 나는 그것이 내 애플 리케이션의 어디서나 요청을하는 사용자를 얻는 좋은 방법인지 알고 싶다. –

답변

1

당신은 Auth 클래스 코드를 사용하는 것에 대한 '심각한 단점'에 대해 이야기합니다. 그러나 당신은 정말로 무엇에 비해 단점을 설명하지 않습니까? 그냥 수동으로 사용자 자신을위한 데이터베이스에서 찾고 계십니까?

모든 Auth::onceUsingId()이 수행하는 모든 작업은 세션이나 쿠키없이 사용자의 응용 프로그램에 로그인하는 것입니다. 이것은 일반적으로 요청간에 지속성이 없기 때문에 API에 적합합니다.

그런 다음 과 같이 사용자에 관한 데이터를 얻으려면 Auth::user()을 수행 할 수 있습니다.

+0

나는 성능상의 문제와 코드의 아름다움과 관련이없는 것을 언급했다. 하지만, 당신의 대답은이 approuch가 괜찮다는 것을 나에게 용기를주는 것처럼 보인다. 감사. –