질문을 삭제하지 말아주세요.!
 
1
0
-1

post controller 에서 

로그인한 사용자만 글을 쓸수있게 하려고


public function __construct()

{

$this→middleware('auth',['except'=>'show']);

}

이런식으로 작성했습니다 show를 제외한 이유는 손님도 글은 볼수있게하려구요

잘 작동은 되는데 로그인 안한 사용자가 글을쓰려하려 링크를 통해 들어가면

Route [login] not defined. 오류가 발생하는데 

제생각에는 미들웨어에서 로그인 안한 사용자를 가려내고 그 사용자를 로그인 페이지로 리다이랙트 시키는데

제 폴더에는 login 이라는 라우트가 제가 만든 로그인페이지랑 이름이 달라 생기는 오류인것같은데 


이미 만들어진것을 이름을 바꿔도 되겠지만 미들웨어 공부도 할겸 수정을 하고싶은데 괜찮을까요 ? 

게스트 미들웨어에서는 RedirectIfAuthenticated 파일안쪽에 수정하는것 처럼 이 경우도 같을까 찾아봤는데

 

설정하는부분이 안보여서 조언좀 부탁드리겠습니다ㅠㅠ

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      기본적으로 Laravel에 포함된 Illuminate\Auth\Middleware\Authenticate 미들웨어를 통하여 인증을 처리하실 경우

      인증안된 유저일 경우 AuthenticationException이 발생됩니다(아래의 소스 참고)

      protected function authenticate(array $guards)
      {
          if (empty($guards)) {
              return $this->auth->authenticate();
          }
      
          foreach ($guards as $guard) {
              if ($this->auth->guard($guard)->check()) {
                  return $this->auth->shouldUse($guard);
              }
          }
      
          throw new AuthenticationException('Unauthenticated.', $guards);
      }


      Illuminate\Foundation\Exceptions\Handler (app/Exceptions/Handler.php의 상속 클래스) 에서 보시면 AuthenticationException를 캐치하여 login router로 리다이렉트 하고 있습니다. (역시 아래 참고)

      protected function unauthenticated($request, AuthenticationException $exception)
      {
          return $request->expectsJson()
                      ? response()->json(['message' => $exception->getMessage()], 401)
                      : redirect()->guest(route('login'));
      }


      여기까지가 라라벨 5.5 기준 기본 인증 미들웨어 관련 설명이였습니다.

      질문으로 돌아와 미들웨어를 통한 auth 체크 후 리다이렉트를 설정하실려면?

      미들웨어를 따로 작성하여 해당 미들웨어를 통과하도록 설정 하시면됩니다. 아래는 예시 코드입니다.

      //app/Http/Middleware/WebAuth.php
      
      
      public function handle($request, Closure $next)
      {
          //인증이 안되어있는경우 로그인 페이지로 이동시킵니다.
          if (!Auth::check()) {
              return redirect()->guest(route('member.login'))->with('error', '로그인이 필요한 페이지입니다.');
          }
      
          return $next($request);
      }
      
      
      //app/Http/Kernel.php
      
      
      protected $routeMiddleware = [
      	// ...
      	'auth' => \App\Http\Middleware\WebAuth::class,
      	// ...
      ];



      1. 최윤석

        감사합니다!! 정말 많은 도움이 되고있어요 ㅠㅠ

      CommentAdd your comment...