2014-08-29 48 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; 
     } 
} 

我的路线(我已经把一些的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 2014-08-29 13:39:01

回答

1

用户密码列必须是'密码'。这是硬编码到Laravel并且不可配置(即使使用getAuthPassword()函数)。

所以从

user_pass | char(60) 

改变你的数据库迁移到

password | varchar(60) 

,改变

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

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

当注册用户,它会工作。

+0

谢谢,工作。 由于brypt总是返回60个字符,char(60)现在更适合varchar(60)。 http://stackoverflow.com/questions/1885630/whats-the-difference-between-varchar-and-char – dragon1993 2014-08-29 14:56:06

0

将用户密码列字段从字符(60)更改为“varchar 255”删除用户密码哈希重新创建它并试一试!

相关问题