2017-03-13 3 views
1

Laravel에는 사용자가 등록 할 수있는 API가 있습니다.Laravel 5에서 고유 한 유효성 검사를 사용 했음에도 불구하고 중복 된 필드

등록은 이메일은 고유 할 수있는 간단한 검증을 가지고 있으며,이 같은 같습니다 중복 이메일 내 테이블에

public function register(Request $request) { 
    $this->validate($request, [ 
     'email' => 'required|email|unique:users|max:255', 
     'password' => 'required|min:6|max:50', 
    ]); 

    // create new user and save model 
} 

불행하게도, 난 아직도 발견 꽤 많은 사용자를.

내 앱이 동일한 요청을 여러 번 연속으로 빠르게 보내는 경우가 있다고 생각합니다. 이는 데이터베이스에 아직 추가되지 않은 것과 동일한 전자 메일을 보유하고 있음에도 불구하고 두 요청 모두 유효성 검사를 통과 함을 의미합니다.

전자 메일의 고유성을 보장하기 위해이 문제를 어떻게 해결할 수 있습니까?

+0

어떻게 도움이 성능 저하가 없습니다 DB의'email' 열에 'UNIQUE' 키를 사용하는 것에 관해서? 그런 다음 코드 1062에서 SQL 오류가 발생했는지 확인할 수 있습니다.이 오류는 키 중복 ()의 오류를 다시 표시합니다. –

+0

예 고유 키를 추가 할 계획 이었지만 오류를 감지하고 처리 할 수 ​​있기를 원했습니다. 언급 한 오류를 어떻게 처리 할 수 ​​있습니까? –

+0

실제로 데이터를 삽입 할 때'try-catch 블록 '을 사용할 수 있습니다 : –

답변

1

당신은 실제로 데이터를 삽입 할 때 try-catch block (자세한 내용은 PHP Manual 참조)를 사용할 수의 경우, 그렇지 않으면 false,

try { 
    $connection->query(<yourInsertquery>); 
    return true; 
} catch (PDOException $e){ 
    if ($e->getCode() == 1062){ 
    return 'duplicate'; 
    } 
    return false; 
} 

을두고 당신이 항목을 중복 될 때마다 'duplicate'가 반환 된 문자열을 얻을 것이다 다른 오류가 있습니다. true

-1

또는 단순히 클라이언트 측의 제출 버튼을 비활성화하여 동일한 양식을 여러 번 제출하는 것을 방지하십시오. 동시 제출 된 두 이메일 세션에서 동일한 이메일 주소를 얻지 못할 수도 있습니다 LY ...

$(document).ready(function() { 

     $('#button').click(function() { 
      $('#button').attr('disabled', true); 
      $('#Form').submit(); 
      return true; 
     }); 

    }); 

당신은 형태에 대한 토큰을 생성하고 하나의 제출로 형성하는 세션 잠금 ... 그 고양이 피부 방법은 여러 가지로 그 토큰을 저장하여이 서버 측과 같은 작업을 수행 할 수 있습니다. (이 프린지 케이스이며, negligeable해야하지만 ...) 이전의 대답은뿐만 아니라 작동하지만 데이터베이스에 왕복이 필요합니다 ...이 사람은

희망이

+0

불행히도 이미 출시 된 모바일 앱입니다. –