【laravel】 「현재의 패스워드」를 체크하는 밸리데이션

3558 단어 Laravel6

개요



패스워드의 변경이나 특별한 조작시에 사양하는 「현재의 패스워드」를 입력하고 나서 실행하는 작업에 관한 투고입니다.

고찰



아래 그림과 같은 "현재 비밀번호"를 확인한 후 "새 비밀번호"를 등록하는 방법의 예입니다.



현재 비밀번호를 확인하기만 하면 laravel 외관의 Hash::check()와 PHP의 password_verify()를 컨트롤러에 작성하여 실행할 수 있습니다.
하지만, 거기에 패스워드의 밸리데이션을 관련짓으면(자) 양쪽 모두의 처리를 동시에 실행할 수 없다고 하는 문제가 생깁니다.
이것은 laravel의 밸리데이션이, 値が異なればerrorをreturnしている 로부터입니다.
물론 처리만으로는 실행할 수 있습니다만, 유저에게 에러의 원인이 보이기 어려워져 불친절합니다.

유효성 검사 규칙 만들기



위의 문제를 해결하려면 "현재 암호"를 유효성 검사 규칙으로 만들면 해결할 수 있습니다.
"현재 비밀번호"를 확인하는 자체 검증 규칙을 작성하면 두 번 번거로운 작업을 한 번에 완료할 수 있습니다.

자세한 내용은 다음을 참조하십시오.
【laravel】 rule 객체에 의한 검증 룰의 추가

유효성 검사 규칙 만들기



여기서는 현재 암호를 확인하기 위해 Rules Current라는 유효성 검사 규칙을 만듭니다.Rulespasses()가 true이면 유효성 검사를 통과하고 false이면 message()를 반환합니다.

먼저 로그인 한 계정의 암호를 얻으려면 Auth()에서 암호를 얻습니다.
그런 다음 Hash() check 메서드에 입력된 암호와 현재 암호를 확인합니다.

Current.php
public function passes($attribute, $value)
{
  $pass = Auth::user()->password;
  return (Hash::check($value, $pass));
}

public function message()
{
  return 'パスワードが一致しません';
}

유효성 검사 실행



유효성 검사 규칙에서 만든 Current을 설명합니다.
이것으로 나머지는 컨트롤러로 설정하면 완료됩니다.
새 비밀번호 검증 규칙은 Register 컨트롤러의 복사본입니다.

.php
'current_password' => new Current(),
'password' => ['string', 'min:8', 'confirmed',],

참고



Laravel 6.x 검증 / 커스텀 검증 규칙
PHP/password_verify

좋은 웹페이지 즐겨찾기