2014-10-08 2 views
5

저는 Laravel을 사용하고 작은 내부 API를 작성하여 각도 프론트 엔드와 연결하는 앱을 만들고 있습니다.Laravel 백엔드에 대한 각도 인증

나는 권한을 가지고 있지만 사용자가 로그인 할 수 있는지 그리고 모든 것이 안전한지 확인하는 것이 바람직합니다.

세션 컨트롤러 :

public function index() { 
    return Response::json(Auth::check()); 
} 


public function create() { 
    if (Auth::check()) { 
     return Redirect::to('/admin'); 
    } 
    return Redirect::to('/'); 
} 

public function login() { 

    if (Auth::attempt(array('email' => Input::json('email'), 'password' => Input::json('password')))) { 
     return Response::json(Auth::user()); 
     // return Redirect::to('/admin'); 
    } else { 
     return Response::json(array('flash' => 'Invalid username or password'), 500); 
    }  
} 

public function logout() { 
    Auth::logout(); 
    return Response::json(array('flash' => 'Logged Out!')); 
} 

Laravel 경로 :

Route::get('auth/status', '[email protected]'); 

각도 공장 :

app.factory('Auth', [ "$http", function($http){ 


var Auth = {}; 

Auth.getAuthStatus = function() { 
    $http({ 
     method: "GET", 
     url: "/auth/status", 
     headers: {"Content-Type": "application/json"} 
    }).success(function(data) { 
     if(!data) { 
     console.log('Unable to verify auth session'); 
     } else if (data) { 
      console.log('successfully getting auth status'); 
      console.log(data);    

      // return $scope.categories; 
      Auth.status = data; 
      return Auth.status; 
     } 
    }); 

} 

return Auth; 

} 

]); 

그때 본질적으로 "AppController가"와 같은 것을에서 전체 응용 프로그램을 감싸는 것 'Auth'팩토리를 의존성으로 선언하십시오. 그러면 Auth.getAuthStatus()를 호출하고 기본적으로 SPA가 될 것이므로 사용자 상태를 기준으로 항목을 숨기거나 표시 할 수 있습니다.

나는 또한/auth/status URI를 누군가가 조회하거나 치는 것을 숨길 필요가 있다는 것을 알고 있으며 어떻게해야하는지 궁금해하고있었습니다. 일종의 일반적인 질문이지만 어떤 통찰력이라도 크게 감사 할 것입니다. 감사.

답변

9

큰 질문입니다. 나는 전에 같은 질문에 답했기 때문에 똑같은 말을 할 것입니다.

Laravel 앱과 Angular를 거의 완전히 분리하기 때문에 인증이 약간 다릅니다. Laravel은 유효성 검사, 논리, 데이터 등을 처리합니다.

아래쪽에 링크 된 기사를 읽으시 길 바랍니다.

Laravel의 경로 필터를 사용하여 권한이없는 사용자로부터 경로를 보호 할 수 있습니다. 그러나 Laravel 응용 프로그램이 이제 끝점이 되었기 때문에 프론트 엔드 프레임 워크는 인증 및 권한 부여와 관련하여 엄청난 노력을 기울일 것입니다.

라우트 필터가 설정되면 권한이 부여 된 사용자가 수행 할 권한이없는 작업을 시도 할 수 없습니다./API/V1/사용자/159/편집

엔드 포인트는 편안하고 7 중 하나이며, 할 수 있습니다 : 당신은 API 엔드 포인트를

:

내가 위가 무엇을 의미, 예를 들면 사용자를 편집하는 데 사용됩니다. 모든 소프트웨어 엔지니어 또는 개발자는 이것이 RESTful 엔드 포인트임을 알고 있으며, 응용 프로그램에 의해 권한이 부여 된 경우 해당 엔드 포인트로 데이터가있는 요청을 보낼 수 있습니다.

사용자 159만이이 작업을 수행하거나 관리자 만 할 수 있기를 원합니다.

해결 방법은 원하는 역할/그룹/사용 권한입니다. Angular 응용 프로그램에서 응용 프로그램에 대한 사용자 권한을 설정하고 해당 데이터를 발급 된 토큰에 저장할 수도 있습니다.

프론트 엔드 JavaScript 프레임 워크를 사용하여 올바르게 인증/권한 부여하는 방법에 대한 훌륭한 자료 (AngularJS)를 읽으십시오.

기사 : https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec

+0

이 글을 보았다, 그냥 아주 그것이 작성 방법에 도움이 잘 첫눈에 실현하지 않았다.노아 한테 고마워. – cpk

+1

문제 없습니다. 도움이 되니 기쁩니다. –

+0

후속 질문이 하나 더 있습니다. 어떻게 작동하는지 알 수 있지만 브라우저 탭이나 새 창/이후 방문 사이에 로그인 상태를 유지하려면 어떻게해야합니까? "세션"서비스에서 laravel의 쿠키 존재 여부 만 확인합니다. 그 모든 것은 클릭하기 시작합니다 ... thanks again – cpk