2016-09-16 3 views
0
내가 Laravel 5.2을 사용하고

을에 작곡가 종속성을 설치하고 난 다음 워크 플로우 문제가있을 때 REPO 파일을 재정의 : 내가 개발하고 응용 프로그램의 로그인에 대한Laravel

를, 내가 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php 아래의 특성 AuthenticatesUsers을 사용자 정의 그 OUT- 온다 내 맞춤형 login() 방법을 사용하여 Laravel과 함께 제공되는 제품입니다.

변경 사항은 git에서 추적하고 있습니다. 문제는 내가 서버에 로그인 할 때 커밋하고 푸시 한 다음 변경 사항을 가져 오는 것입니다.

내 문제는 다음과 같습니다. 파일은 기본 패키지 파일로 composer update --no-dev (스테이징 서버에 저장)이므로 login() 메소드에 대한 모든 사용자 정의를 버리면 덮어 쓰기됩니다.

필자는 "postUpdate"작곡가 스크립트를 작성하여 파일을 덮어 쓰는 과정을 자동화하려고했습니다. 아니면 bash 스크립트를 사용할까요? 내 작곡가 의존성을 업데이트 할 때마다 파일을 수동으로 git로 덮어 쓰는 일에 지쳤다.

제안 사항?

미리 도움을 주셔서 감사합니다.

건배!

+0

) 'AuthenticatesUsers' 특성에는 어떤 종류의 사용자 정의가 필요합니까? Laravel은 많은 설정 옵션을 제공하며, 최악의 경우 사용자 지정 구현을 충돌을 피하기 위해 'vendor' 폴더에서 이동할 수 있어야합니다. [문서보기] (// laravel.com/docs/5.2/authentication) –

+1

맞습니다. 내 코드/구조를 리팩터링하고 공급 업체에서 로직을 옮기 겠지만, 단기 솔루션으로이 작업을 수행 할 수 있어야합니다. 내 앱의 유효한 로그인이 DB가 아니라 다른 시스템의 API 호출 때문에 로그인 메소드를 다시 정의하고 있습니다. – idelara

+0

좋습니다. 귀하의'vendor' 폴더가 Git에 의해 추적되고 있습니까, 아니면 무시됩니까? 'composer.lock'은 어때? –

답변

0

AuthController는 AuthenticatesAndRegistersUsers를 사용하지만 컨트롤러의 메서드를 재정의하거나 자신의 AuthenticatesAndRegistersUsers (복사본) 버전을 사용할 수 없다는 것을 의미하지는 않습니다.

공급 업체 디렉토리 (Illuminate 포함)에서 아무 것도 수정하지 않으려합니다. 이들은 공급 업체 패키지입니다. 작곡가가 벤더 패키지를 덮어 쓰는 이유가 있습니다. 수정할 코드가 아니며 패키지 관리자가 보안 수정 및 버그 수정과 같은 업데이트를 제공 할 수 있습니다. 공급 업체 패키지의 파일을 덮어 쓰면 다른 파일의 패키지 내의 다른 종속성이 변경되어 중단 될 수 있습니다.

따라서 공급 업체 패키지를 수정하는 대신 클래스를 확장하거나 메소드를 재정의하십시오. AuthenticatesUsers를보고 컨트롤러에 postLogin 메소드를 복사하면됩니다 (예 :

AuthController extends Controller 
{ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    public function __construct(){ 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

    public function postLogin(Request $request) 
    { 
     $this->validate($request, [ 
      $this->loginUsername() => 'required', 'password' => 'required', 
     ]); 

     $throttles = $this->isUsingThrottlesLoginsTrait(); 

     if ($throttles && $this->hasTooManyLoginAttempts($request)) { 
      return $this->sendLockoutResponse($request); 
     } 

     $credentials = $this->getCredentials($request); 

     if (Auth::attempt($credentials, $request->has('remember'))) { 
      return $this->handleUserWasAuthenticated($request, $throttles); 
     } 

     if ($throttles) { 
      $this->incrementLoginAttempts($request); 
     } 

     // Overriding the postLogin to deliver 401 unauthorized instead of redirecting back to login with errors 
     abort(401, "Oh no you don't"); 

     // return redirect($this->loginPath()) 
     //  ->withInput($request->only($this->loginUsername(), 'remember')) 
     //  ->withErrors([ 
     //   $this->loginUsername() => $this->getFailedLoginMessage(), 
     //  ]); 
    } 

}