2016-08-24 10 views
0

로그인 한 후 사용자가 자신의 역할에 따라 URL로 리디렉션되는 기능을 구현하려고합니다. 역할 부분을 설정했지만 로그인 직후 사용자 속성을 테스트하는 데 문제가 있습니다.로그인 후 laravel 5.1

나는 here 지침에 따라 사용자 로그인 페이지를 만들었습니다. 나는이처럼 보이는 AuthController 있습니다

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller { 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 
    protected $redirectTo = '/test'; 
    ... 
} 

__construct() 기능은 사용자의 유효성을 검사하지만 로그인 후에 만 ​​즉시 사용자 개체에 액세스하는 방법을 모르겠어요.

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

    if (\Auth::check()) { 
     $user = \Auth::user(); 
     if ($user->admin()) { 
     // an admin 
      $this->redirectTo = '/admin'; 
     } else { 
     // it's a client 
      $this->redirectTo = '/client/dashboard'; 

     } 
    } 

    $user = \Auth::user(); 
    if (is_object($user)) { 
    } else { 
     $this->redirectTo = '/auth-not-object'; 
    } 
} 

내가 먼저 관리자 계정으로 로그인을 시도

, 나는 경로 /auth-not-object에 도착, 그 시점에서 모든 인증 된 사용자 개체 없기 때문에이 내가 현재 가지고있는 것입니다. 나는 /login URL을 방문 할 때 로그인하지만, 나쁜 리디렉션을 얻기 위해 시도한 후

는, 나는이 클래스가 사용하는 특성의 기본 $redirectTo이라고 생각 /home로 리디렉션. 즉, 인증 된 사용자가 있어도 $redirectTo을 변경하지 않고 AuthController __construct() 메서드를 통과 한 것입니다.

How to add extra logic on login condition in Laravel 5.2laravel redirect to url after login과 같은 다른 질문을 발견했지만 그 답변을 적용하는 방법을 모르겠습니다. 예를 들어, 두 번째 질문에 대한 대답으로는 getCredentials()login()이라는 새로운 방법이 포스터의 원래 클래스에 없습니다. 나는 그들을 추가 할 클래스, 또는 코드베이스에서 어디에서 호출 할 지 모르겠습니다.

다른 유사한 대답은 this과 같이 근본적으로 다른 사용자 인증 방법을 보여줍니다. 이 솔루션을 사용하려면 내 코드를 다시 작성하고 로그인 제한과 같은 보너스 기능을 포함하는 특성을 사용하지 않아야합니다.

로그인 후에도 이러한 내장 된 특성을 사용하면서 사용자를 리디렉션 할 수있는 방법이 있습니까? 이것은을 결정하는 방법은

protected function handleUserWasAuthenticated(Request $request, $throttles, $guard) 
    { 
     if ($throttles) { 
      $this->clearLoginAttempts($request); 
     } 
     if (method_exists($this, 'authenticated')) { 
      return $this->authenticated($request, Auth::guard($guard)->user()); 
     } 
     return redirect()->intended($this->redirectTo); 
    } 

: 5.1 인증이 5.2 인증과 동일하지만,이 경우이 방법을 구조물에서 모든 것을 제거하고 추가하는 경우

답변

1

임 확실하지 리디렉션하고 사용자 개체에 액세스 할 수 있습니다.

편집

내가 다시 위가 바로 컨트롤러에 다음을 추가 걸릴; 작동해야

protected function authenticated($request, $user) { 
    return redirect()->intended($user->admin() ? '/admin' : '/client/dashboard'); 
} 

좋게

+0

또한> 미들웨어 ('게스트', [ '제외'=> '를 getLogout']) '$ this- 제거,'? 그것이 상자에서 나온 유일한 작품이었습니다. – user151841

+0

App \ Http \ Controllers \ Auth \ AuthController :: handleUserWasAuthenticated()에 전달 된 인수 1이 App \ Http \ Controllers \ Auth \ Request의 인스턴스 여야합니다. Illuminate \ Http \ Request 인스턴스가 있어야합니다. , 메소드 시그니처를 'protected function handleUserWasAuthenticated (\ App \ Http \ Controllers \ Auth \ Request $ request, $ throttles, $ guard) {}로 변경 한 후에도 ...' – user151841

+0

더 나은 솔루션에 대한 내 대답을 편집했습니다 (방금 위의 방법 중 두 번째 부분을 보았습니다!) –