2013-05-20 109 views
4

有問題Laravel認證和登錄用戶4.用戶認證在Laravel 4

我的登錄表單定向到這條路線。

Route::post('login', function() { 
    // get POST data 
    $userdata = array(
     'username'  => Input::get('username'), 
     'password'  => Input::get('password') 
    ); 

    if (Auth::attempt($userdata)) 
    { 
     // we are now logged in, go to home 
     return Redirect::to('/'); 
    } 
    else 
    { 
     // auth failure! lets go back to the login 
     return Redirect::to('login') 
      ->with('login_errors', true); 
     // pass any error notification you want 
     // i like to do it this way :) 
    } 
}); 

在這一點上一切似乎都很好。我被重定向到主頁但是,沒有存儲用戶對象。如果我嘗試訪問任何用戶函數,我會得到「嘗試獲取非對象的屬性」錯誤。

這裏是我的用戶模型

<?php 

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

class User extends Eloquent implements UserInterface, RemindableInterface { 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'tblusers'; 
    /** 
    * The database key used by the model. 
    * 
    * @var string 
    */ 
    protected $key = 'userid'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = array('password'); 

    /** 
    * Get the unique identifier for the user. 
    * 
    * @return mixed 
    */ 
    public function getAuthIdentifier() 
    { 
     return $this->getKey(); 
    } 

    /** 
    * Get the password for the user. 
    * 
    * @return string 
    */ 
    public function getAuthPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Get the e-mail address where password reminders are sent. 
    * 
    * @return string 
    */ 
    public function getReminderEmail() 
    { 
     return $this->email; 
    } 

    public function roles() 
    { 
     return $this->belongsToMany('Role'); 
    } 

    public function permissions() 
    { 
     return $this->hasMany('Permission'); 
    } 

    public function hasRole($key) 
    { 
     foreach($this->roles as $role){ 
      if($role->name === $key) 
      { 
       return true; 
      } 
     } 
     return false; 
    } 

} 

的信息的一塊,我覺得很奇怪。如果,而不是重定向到'/'我return View::make('home')它存儲對象就好了,但是當我離開那個頁面時它會再次消失。

編輯:

因爲這必須是與我已供參考我session.php文件文件會話。

<?php 

return array(

    /* 
    |-------------------------------------------------------------------------- 
    | Default Session Driver 
    |-------------------------------------------------------------------------- 
    | 
    | This option controls the default session "driver" that will be used on 
    | requests. By default, we will use the lightweight native driver but 
    | you may specify any of the other wonderful drivers provided here. 
    | 
    | Supported: "native", "cookie", "database", "apc", 
    |   "memcached", "redis", "array" 
    | 
    */ 

    'driver' => 'native', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Lifetime 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may specify the number of minutes that you wish the session 
    | to be allowed to remain idle for it is expired. If you want them 
    | to immediately expire when the browser closes, set it to zero. 
    | 
    */ 

    'lifetime' => 5, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session File Location 
    |-------------------------------------------------------------------------- 
    | 
    | When using the native session driver, we need a location where session 
    | files may be stored. A default has been set for you but a different 
    | location may be specified. This is only needed for file sessions. 
    | 
    */ 

    'files' => storage_path().'/sessions', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Database Connection 
    |-------------------------------------------------------------------------- 
    | 
    | When using the "database" session driver, you may specify the database 
    | connection that should be used to manage your sessions. This should 
    | correspond to a connection in your "database" configuration file. 
    | 
    */ 

    'connection' => null, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Database Table 
    |-------------------------------------------------------------------------- 
    | 
    | When using the "database" session driver, you may specify the table we 
    | should use to manage the sessions. Of course, a sensible default is 
    | provided for you; however, you are free to change this as needed. 
    | 
    */ 

    'table' => 'sessions', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Sweeping Lottery 
    |-------------------------------------------------------------------------- 
    | 
    | Some session drivers must manually sweep their storage location to get 
    | rid of old sessions from storage. Here are the chances that it will 
    | happen on a given request. By default, the odds are 2 out of 100. 
    | 
    */ 

    'lottery' => array(2, 100), 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Name 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may change the name of the cookie used to identify a session 
    | instance by ID. The name specified here will get used every time a 
    | new session cookie is created by the framework for every driver. 
    | 
    */ 

    'cookie' => 'laravel_session', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Path 
    |-------------------------------------------------------------------------- 
    | 
    | The session cookie path determines the path for which the cookie will 
    | be regarded as available. Typically, this will be the root path of 
    | your application but you are free to change this when necessary. 
    | 
    */ 

    'path' => '/', 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Cookie Domain 
    |-------------------------------------------------------------------------- 
    | 
    | Here you may change the domain of the cookie used to identify a session 
    | in your application. This will determine which domains the cookie is 
    | available to in your application. A sensible default has been set. 
    | 
    */ 

    'domain' => null, 

    /* 
    |-------------------------------------------------------------------------- 
    | Session Payload Cookie Name 
    |-------------------------------------------------------------------------- 
    | 
    | When using the "cookie" session driver, you may configure the name of 
    | the cookie used as the session "payload". This cookie actually has 
    | the encrypted session data stored within it for the application. 
    | 
    */ 

    'payload' => 'laravel_payload', 

); 

到目前爲止,我已經嘗試過'cookie'和'native'會話驅動程序,每個都沒有運氣。

+0

請分享您用來訪問您的用戶的代碼。 –

+0

您是否已正確設置會話? – DaGardner

+0

使用本機會話驅動程序 –

回答

6

簡單修復。在我的模型我定義

protected $key = 'userid'

我需要做的是將其更改爲

protected $primaryKey = 'userid';

希望這有助於沿線的人。