2013-05-21 4 views
1

laravel 4에서 응용 프로그램을 만들고 있는데 문제가 생겼습니다.laravel 4 인증 확인은 항상 false를 반환합니다.

지금까지 인증 시스템을 만들려고했습니다. 나는 몇몇 자습서를 따라 갔지만 그들 중 누구도 작동하지 않는 것 같습니다. 자습서가 이미 구식이기 때문에 가능할 수 있습니다 (laravel은 계속 진화하고 있습니다).

내가 로그인 양식을 가지고가,이 양식은 사용자를 인증 :

여기 내 상황입니다. 그리고 그것은 정상적으로 작동합니다, 이것은 내 routes.php 파일의 코드입니다.

Route::post('login', function() { 
    $user = array(
     'e-mail' => Input::get('E-mail'), 
     'password' => Input::get('password') 
    ); 
    if (Auth::attempt($user)) { 
     return Redirect::route('home') 
      ->with('flash_notice', 'You are successfully logged in.'); 
    } 

    // authentication failure! lets go back to the login page 
    return Redirect::route('login') 
     ->with('flash_error', 'Your username/password combination was incorrect.') 
     ->withInput(); 
}); 

그래서 로그인 할 때 홈 페이지로 이동하면 메시지가 표시됩니다. 아무런 문제가 없습니다. 내보기에서 나는 다음과 같은 코드를 가지고있다 (나는 이것을 위해 블레이드를 사용한다).

 <ul> 
      <li><a href="{{ URL::to('home') }}">Home</a></li> 
      @if(Auth::check()) 
       <li><a href="{{ URL::to('profile') }}">Profile</a></li> 
       <li><a href="{{ URL::to('logout', 'Logout ('.Auth::user()->e-mail.')') }}">Logout</a></li> 
      @else 
       <li><a href="{{ URL::to('login') }}">Login</a></li> 
      @endif 
     </ul> 

문제는 Auth :: check()이 false를 반환하더라도 문제가된다는 것입니다. 몇 시간 동안이 문제를 조사하고 어디에서 계속해야할지 모르겠다. ...

사용자 모델에서 getKey() 메서드는 null을 반환하므로 데이터베이스가 잘못되었을 수도 있습니다. 그러나 데이터를 완벽하게 가져 오는 중입니다.

감사합니다.

장면 뒤에
+0

이것은 분명 PHP가 아닙니다. –

+4

예, 그렇습니다 ... 왜 그렇게되지 않았겠습니까? –

+0

사미, 그냥 템플릿입니다. 마이크, 브라우저에 쿠키가 있는지 보시겠습니까? – Adelf

답변

13

이것은 바보 같은 실수였습니다. Laravel은 기본 키를 smallcaps에서 'id'로 정의합니다. 데이터베이스에 사용 된 ID가 'ID'로 정의되었습니다.

내 데이터베이스의 필드 이름을 변경하여이 문제를 해결했습니다. 또 다른 옵션은

좋은 일을 가지고 ...

모델의
protected $primaryKey = 'ID'; 

을 정의하는 것입니다

1

$user = array( 'e-mail' => Input::get('E-mail'), 'password' => Input::get('password') );

, 웅변이나 유창함 쿼리 빌더에 쿼리 상당을 사용하여 가져 오기 위해 시도 할 것입니다 : 당신이 필드 e-mail이있는 경우이 모든 좋은 것

$user = User::where('e-mail', '=', ?)->first();

하지만, Auth::user()->e-mail이 잘못된 구문이되어 Eloquent와 (과) 문제가 발생할 것입니다.

+0

"전자 메일"필드가 "username"으로 변경되었지만 동일한 문제가 발생합니다. 나는 완전히 새로운 laravel, 그래서 나는 당신의 메시지를 오해했을 수도 있습니다. 나는 정말로 웅변과 함께 일하고있다. 그건 그렇고, 이것은 제가 작업 한 기초 자료 인 http://laravelbook.com/laravel-user-authentication/입니다. – Dries

0

그냥 경로가 웹 미들웨어 그룹 아래에 있는지 여부를 확인

Route::group(['middleware' => 'web'] , function() { 
} 

인증 페이지에 웹 미들웨어가없는 경우 작동하지 않습니다.

관련 문제