글 작성자: 개발섭

Laravel 실시간 검증 방식

라라벨에서 실시간 검증을 해야하는 경우가 있을것이다. 실시간 검증의 경우 매번 서버검증을 통해서 해결하는 방식이 아닌, 비동기적인 방식으로 검증을 매번 처리해야한다.

근데 laravel에서는 비동기적으로 이미 구현할 수 있게 내부적으로 구현이 되어있다. $validated = $request->validated();처리를 하면 알아서 비동기적으로 발송되게 한다.

구체적으로 예시를 들어서 설명하겠다. 라라벨에서 vue로 스케폴딩한 auth기능을 사용하면,

  public function register(Request $request)
     {
         $this->validator($request->all())->validate();
         ...

register 기능에 이미 validate() 처리가 되어있다. 이렇듯 validation을 위한 기능은 라라벨에서 제공하는 Reqeust 객체(라라벨에서 객체의 유효성과 관련된 룰을 설정할 수 있는 역할을 하는 객체)를 Parameter를 통해 처리해서 그에 따라 validate()메소도만 설정해주면 알아서 JSON으로 전달을 해준다는 것이다.

실제 공식문서는 다음과 같이 적혀있다.

 

AJAX 요청인 경우 유효성 검사 오류가 JSON 형식으로 재구성되어 422 상태 코드가있는 HTTP 응답이 사용자에게 반환됩니다.

 

그러면 우리는 이걸 잘 떠먹기만 하면 된다.

 

공식문서의 경우 AJAX 라고 작성했는데, 비동기적인 호출을 하는 방식이라면 모두 응답이 전달이 되는 것 같다. Axios나 ES버젼의 JS의 Fetch도 같은 기능을 할 것이라고 생각한다. (Axios까지는 해봤는데 fetch는 직접 해본건 아니기때문에 확답은 못하겠음)

이슈사항

  • 신규 Request를 통해서 룰을 새로 만든 경우 ex) Email 중복성 검사만 해야하는 경우에는 아예 새로 Request를 만들고 Controller에서 메소드 생성후 라우팅을 통해 url을 붙이는게 좋다.

 

예상보다 비동기 전달시 401 오류를 해결할 방법을 찾지 못해서 꽤 고생했었다. middleware나 인증 인가와 관련된 문제라고 생각했지만... 아닌 경우가 많았다.

 

  • 비동기로 실시간 유효성 처리시 401이나 403과 같은 authenticated 문제가 발생시 새로 생성한 Request 의 아래의 메소드의 Return을 true로 전환을 해줘야지 401,403문제가 해결된다.
 public function authorize()
   {
     return true;
   }

 

왜 트루인지 확인해봤다.

 

이 메소드 안에서 여러분은 인증된 사용자가 주어진 리소스에 대해서 수정할 수 있는 권한이 있는지 확인할 수 있습니다. 예를 들어, 사용자가 블로그 포스트의 댓글을 수정하려고 시도할 때, 그 본인의 코멘트인지 확인할 수 있습니다.

 

즉, 이걸 통해서 유저가 이 폼을 사용할 수 있는지를 먼저 확인해보고 만약 사용할 수 없는 경우라면, 403과 같은 리퀘스트를 자동으로 반환해줄 것이다.

 

여러분이 애플리케이션의 다른 부분에 있는 인증로직을 사용할 계획이라면, authorize 메소드에서 true를 리턴하면 됩니다.

'Backend > PHP&Laravel' 카테고리의 다른 글

라라벨 커스텀 이메일 인증  (0) 2021.08.11