2014-08-29 5 views
0

Laravel 4.2를 설치했지만 'Auth :: attempt()'함수를 사용하여 사용자를 허용 할 수는 있지만 문제가 발생했습니다. 'Auth :: loginUsingId()'함수를 사용하여 로그인하십시오.Laravel 4 - Auth :: attempt()가 작동하지 않고 FALSE를 반환했습니다.

내 사용자 모델

<?php 

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

class User extends Eloquent implements UserInterface, RemindableInterface { 

     public $timestamps = false; 
     protected $table = 'user'; 
     protected $primaryKey = 'user_id'; 

     protected $hidden = array('user_pass', 'remember_token'); 

     public function getAuthIdentifier(){ 
      return $this->getKey(); 
     } 

     public function getAuthPassword(){ 
      return $this->user_pass; 
     } 

     public function getRememberToken(){ 
      return $this->user_remembertoken; 
     } 

     public function setRememberToken($value){ 
      $this->user_remembertoken = $value; 
     } 


     public function getRememberTokenName(){ 
      return "user_remembertoken"; 
     } 

     public function getReminderEmail(){ 
      return $this->user_email; 
     } 
} 

내 경로 (I 일부 exaple에 넣었습니다)

Route::get('login', function(){ 
     $user = 'dd'; 
     $pass = '123456'; 
     $credentials =["user_nickname" => "dd","user_pass" => "123456"]; 
     if(Auth::attempt($credentials)){ 
      echo 'Login Successful'; 
     } 
     else{ 
      echo 'Login Failed'; 
     } 
}); 

Route::get('check', function() 
{ 
if(Auth::check()){echo 'identified';} 
else{echo 'not identified';} 
return; 
}); 

Route::get('reg', function() 
{ 
    $user = new User; 
    $user->user_nickname = 'dd'; 
    $user->user_pass = Hash::make('123456'); 
    $user->user_realname = 'dd'; 
    $user->user_email = '[email protected]'; 
    $user->user_accesslevel = 1; 
    $user->user_language = 'HU'; 

    $user->save(); 
}); 



Route::get('forcelogin', function() 
{ 
Auth::loginUsingId(6,TRUE); 
return; 
}); 

내 데이터베이스

user_id | smaillint 
user_nickname | varchar(25) 
user_pass | char(60) 
user_email | varchar(255) 
user_realname | varchar(60) 
user_accesslevel | tinyint(3) 
user_language | char(2) 
user_regdate | timestamp 
user_remembertoken | char(60) 
+0

팁 : 더 나은 데이터베이스 디자인을 수행하십시오. 테이블 "사용자"가 있고 열 "id"가 분명히 사용자의 ID 인 경우 user_id로 지정하지 않아도됩니다. 언급 한 모든 열에도 똑같이 적용됩니다. $ user-> id는 $ user-> user_id보다 의미가 있습니다. – thegeekajay

답변

1

사용자 암호 열은 '암호'여야합니다. 이것은 Laravel로 하드 코딩되어 구성 할 수 없습니다 (getAuthPassword() 기능 포함).

그래서

password | varchar(60) 

user_pass | char(60) 

에서 데이터베이스 마이그레이션을 변경하고 변경

$user->user_pass = Hash::make('123456'); 

$user->password = Hash::make('123456'); 

사용자를 등록 할 때 작동합니다.

+0

감사합니다. char (60)은 brypt가 항상 60자를 반환하므로 varchar (60)보다 좋습니다. http://stackoverflow.com/questions/1885630/whats-the-difference-between-varchar-and-char – dragon1993

0

사용자 비밀번호 열 필드를 char (60)에서 "varchar 255"로 변경합니다. 사용자 비밀번호 해시를 다시 만들고 시도해보십시오!

관련 문제