2017-03-16 1 views
1

알고리즘은 작동하지만 암호가 해시로 변환되고 데이터베이스에 저장되면 암호가 홈페이지로 리디렉션되지 않습니다. 대신, 로그인 자격 증명이 잘못되었음을 나타내는 로그인 페이지로 리디렉션됩니다. 하지만 로그인을 시도하면 괜찮습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Laravel에서 md5를 해시로 변환 할 때의 버그

AuthenticatesUsers.php는

protected function attemptLogin(Request $request) 
{ 
    $check = $this->guard()->attempt(
     $this->credentials($request), $request->has('remember') 
    ); 
    if ($check === false) 
    { 
     $user = User::where('username','=',$request->input('username'))->first(); 

     if(isset($user)) { 
      if($user->password == md5($request->input('password'))) { // If their password is still MD5 
       $hashed_password = Hash::make($request['password']); // Convert to new format 
       $user->password = $hashed_password; 
       $user->save(); 

       return $this->guard()->attempt(
        array(
         'username'=>$request->input('username'), 
         'password'=>$hashed_password 
        ), $request->has('remember') 
       ); 

      } else { 
       // Redirect to the login page. 
       return false; 
      } 
     } 
    } 
    return $check; 
} 
+0

그래서 사용자가'md5 hashed password'를 사용하여 로그인 할 수 있다고 상상해보십시오. –

+0

예, 내가 현재 md5를 laravel의 해시로 바꾸고 있습니다. 그러나 문제는 그 이후입니다. – EatCodePlaySleep

+0

그래서 데이터베이스에있는 기존의 md5 암호를'laravel hashing'으로 변환해야합니까? 그렇다면 if (password_verify ($ request-> input ('password'), $ user-> password))'대신에'if '라고 말하십시오. –

답변

2

attempt은 당신이 사용자로부터 얻을 것 비밀번호 (일반 텍스트 암호) 소요, 해시 된 암호를 고려하지 않습니다. 사용자는 해시 된 암호 버전을 모르며 attempt은 일반 텍스트 버전이 필요한 해시 검사를 수행합니다.

이미 사용자와 자격 증명의 유효성을 검사하고 해당 자격 증명을 나타내는 User 인스턴스가있는 경우 attempt을 다시 호출 할 필요가 없습니다. 그 시점에서 login을 사용하여 로그인하십시오. attempt을 통해 데이터베이스를 다시 쿼리하여 사용자를 얻으 려하지 않고 방금 설정 한 이후로 올바른 것으로 알고있는 해시를 확인할 수 있습니다.

코드의 일부분에 대해서만 attempt이 내부적으로 수행하는 작업을 다시 작성하는 것입니다.

또한 사용자는 데이터베이스를 직접 쿼리 할 필요가 없습니다. attempt에 대한 첫 번째 호출은 데이터베이스를 쿼리 한 시점에서 발견 한 '사용자'에 대한 호출을 유지합니다. 데이터베이스에서 다시 쿼리 할 필요가 없도록 가드에서 검색 할 수 있습니다 ($this->guard()->getLastAttempted()).

이러한 변경을 수행하면 더 이상 호출되지 않으므로 두 번째 attempt 호출에서 오는 '잘못된 자격 증명'문제가 제거됩니다. 이렇게하면 3 개의 선택 항목과 1 개의 업데이트에서 1 개의 선택 항목과 1 개의 업데이트 항목으로 쿼리를 줄일 수 있습니다. (대략)

+0

설명 남자를위한 감사합니다, 여기에 내가 데이터베이스에 저장 한 후 그 일이 있습니다. \t \t \t \t'$ request-> session() -> regenerate(); \t \t \t \t $ this-> clearLoginAttempts ($ request); \t \t \t \t Auth :: login ($ user, true);' – EatCodePlaySleep