2013-06-14 2 views
8

저는 Laravel의 Auth 클래스를 사용하고 있지만 사용자가 로그인 할 때마다 false를 반환합니다. 여기에 내 코드입니다 :Laravel 4 Auth :: attempt() 항상 false를 반환합니다.

Routes.php

Route::get('new-user', function() { 
    return View::make('register'); 
}); 

Route::post('new-user', function() { 
    $name = Input::get('name'); 
    $email = Input::get('email'); 
    $password = Hash::make(Input::get('password')); 

    $user = new User; 
    $user->name = $name; 
    $user->email = $email; 
    $user->password = $password; 

    $user->save(); 
});  

Route::get('login', function() { 
     return View::make('login'); 
    }); 

    Route::post('login', function() { 

     $user = array(
      'email' => Input::get('email'), 
      'password' => Hash::make(Input::get('password')) 
     ); 

     if (Auth::attempt($user)) { 
      //return Redirect::intended('dashboard'); 
      return "ok."; 
     } else { 
      return "Wrong."; 
     } 

    }); 

보기/login.blade.php

{{ Form::open(array('url' => 'login', 'method' => 'post')) }} 

    <h1>Login:</h1> 

    <p> 
     {{ Form::label('email', 'Email: ') }} 
     {{ Form::text('email') }}<br /> 

     {{ Form::label('password', 'Password: ') }} 
     {{ Form::password('password') }}<br /> 
    </p> 

    <p> 
     {{ Form::submit('Login') }} 
    </p> 

{{ Form::close() }} 

설정 데이터베이스는 이메일을 가지고/auth.php

return array(

    'driver' => 'eloquent', 
    'model' => 'User', 
    'table' => 'users', 
    'reminder' => array(
     'email' => 'emails.auth.reminder', 'table' => 'password_reminders', 
    ), 

); 

& 암호 필드 및 암호 필드는 varchar (60)입니다. /login에 로그인 정보를 보낼 때마다 "잘못"이라고 표시됩니다. 정말 여기서 뭐가 잘못된 건지 모르겠군요?

답변

3

은 시도하기 전에 암호 해시하지 마십시오 당신이 Auth::attempt()에 잘못된 변수를 전달하기 때문에

$user = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    if (Auth::attempt($user)) { 
     //return Redirect::intended('dashboard'); 
     return "ok."; 
    } else { 
     return "Wrong."; 
    } 
+0

여전히 나를 잘못 반환합니다 ("틀렸어.") – John

+1

설명서 (http://four.laravel.com/docs/security#storing-passwords)에 따르면 암호는 시도 할 때 unhashed로 전달됩니다. 이것이 하나의 문제라고 확신하지만, 둘 이상있을 수 있습니다. 암호가 사용자 테이블에 올바르게 저장되어 있는지 확인하십시오. –

+0

다음은 데이터베이스에 사용자를 저장하는 방법입니다. Route :: post ('new-user', function() { $ name = Input :: get ('name'); $ email = Input :$ user-> name = $ name; $ user-> $ user-> name = $ name; 이메일 = $ 이메일, $ 사용자 -> 비밀 번호 = $ 암호; $ 사용자 -> 저장(); });' 죄송 i '를 제대로 여기에 코드를 표시하는 방법을 잘 모릅니다. – John

6

코드는 밖으로 도청된다. 이 방법을 사용하려면 username, password 키가있는 배열이 필요하며 선택적으로 기억하십시오. 위의 코드에서 위 코드는 다음과 같아야합니다.

Route::post('login', function() 
{ 
    $credentials = [ 
     'username' => Input::get('email'), 
     'password' => Input::get('password') 
    ]; 

    dd(Auth::attempt($credentials)); 
}); 

희망이 있습니다.

또한 작업 흐름을 개선하기위한 추가 코드를 알려 드리겠습니다.

Route::post('register', function() 
{ 
    $input = Input::only(['username', 'email', 'password']); 

    // validate data 

    Eloquent::unguard(); 

    $user = User::create($input); 

    Auth::loginUsingId($user->id); 

    return Redirect::to('dashboard'); 
}); 

그런 다음 사용자 모델에 추가 암호가 될 것입니다

public function setPasswordAttribute() 
{ 
    $this->password = Hash::make($this->password); 
} 

이 방법은 자동으로 제공 UserInterface 클래스를 구현해야

0

이 설정되어 때마다 해시 방법 : 경로는 새 사용자를 저장합니다 모델 클래스 내의 laravel에 의해

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface 
{ 

그리고 모델에 선언해야하는 2 가지 추상 메소드가 있음을 기억하십시오. 원본을 따를 수 있습니다 User.php

0

비밀번호를 확인하십시오. 길이. 데이터베이스에서 60 이상이어야합니다.

0

auth :: 시도가 bcrypt를 사용하여 암호를 해시로 변환하고 사용자 테이블의 해당 해시가 일치하는지 확인하기 때문에이 방법은 작동하지 않습니다.

간단히 말해서 암호는 인증을 시도하기 위해 데이터베이스 테이블에 저장된 해시 여야합니다.

if() 조건이 실패하는 이유입니다.

당신은

아래

https://laravel.com/docs/5.2/authentication#authenticating-users

이 시도 방법은을 받아 laravel 워드 프로세서에서입니다 인증 :: 시도를 데이터베이스에 해시로 암호를 저장하고 사용하는 bcrypt (비밀번호)를 사용할 수 있습니다 키/값 쌍의 배열을 첫 번째 인수로 사용합니다. 배열의 값은 데이터베이스 테이블 에서 사용자를 찾는 데 사용됩니다. 위의 예에서 사용자는 으로 이메일 열 값으로 검색됩니다. 사용자가 발견되면 데이터베이스에 저장된 암호 은 배열을 통해 메소드에 전달 된 해시 된 암호 값 과 비교됩니다. 두 개의 해시 된 암호가 일치하면 인증 된 세션이 사용자 에 대해 시작됩니다.

인증에 성공하면 시도 방법은 true를 반환합니다. 그렇지 않으면 false가 반환됩니다.

관련 문제