4

Having problems authenticating and logging in users in Laravel 4.

My login form directs to this route.

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 :) } }); 

At this point everything seems to be going fine. I'm redirected to the home page just fine however, there is no user object stored. If I try to access any user function I get the "Trying to get property of non-object" error.

Here is my User Model

<?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; } } 

A Piece of information i find strange. If, instead of redirecting to '/' I return View::make('home') it stores the object just fine, however when I leave that page it disappears again.

EDIT:

Since this must have something to do with sessions I've posted my session.php file for reference.

<?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', ); 

So far I've tried 'cookie' and 'native' session drivers each with no luck.

6
  • Share the code you're using to access your user, please. Commented May 20, 2013 at 15:30
  • Do you have setup your sessions correctly? Commented May 20, 2013 at 15:31
  • Using Native Session Driver Commented May 20, 2013 at 15:34
  • @AntonioCarlosRibeiro First time using Laravel, what exactly are you referring to? From the Docs I understood Auth::attempt to automatically interface with the user model and store the user in session. Am I wrong on that? Commented May 20, 2013 at 15:44
  • After that you need to use Auth::user() to access your logged user, is that what you're doing? I.e.: Auth::user()->email Commented May 20, 2013 at 15:48

1 Answer 1

5

Simple Fix. In my model I had defined

protected $key = 'userid'

What I needed to do was change it to

protected $primaryKey = 'userid';

Hopefully this helps someone along the line.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.