Question

I want to use column email and password for login. Password is hashed during registration and saved to the database ('driver' => 'database'). Email column is not primary key, but just unique.

AuthController.php:

// Get all the inputs
        $userdata = array(
            'email' => Input::get('username'),
            'password'  => Input::get('password')
        );

        // Declare the rules for the form validation.
        $rules = array(
            'email' => 'Required',
            'password'  => 'Required'
        );

        // Validate the inputs.
        $validator = Validator::make($userdata, $rules);

        // Check if the form validates with success.
        if ($validator->passes())
        {

            // Try to log the user in.
            if (Auth::attempt($userdata, true))
            {
                // Redirect to homepage
                return Redirect::to('')->with('success', 'You have logged in successfully');
            }
            else
            {
                // Redirect to the login page.
                return Redirect::to('login')->withErrors(array('password' => 'password invalid'))->withInput(Input::except('password'));
            }
        }

Anyway, I just got error: ErrorException Undefined index: id

It also shows me this:

 public function getAuthIdentifier()
        {
            return $this->attributes['id'];
        }

What I am doing wrong? Thanks

EDIT

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 = 'users';

    /**
     * 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;
    }
}

No correct solution

OTHER TIPS

getAuthIdentifier is an interface method. GenericUser class is implementating that method and requires user id.

So check do you really have id attribute on your model.

You most probably didn't assign your primary key in the user table, the ID should be primary key and also you may add following in your User model to specify your custom primary key:

protected $primaryKey = 'id';

Make sure that, the primary key in the user table matched with this ($primaryKey), means that, must be same.

In case this helps someone in the future here is how I resolved this. As @WereWolf suggested you do want to set

protected $primaryKey = 'id';

in your model, but your driver should also be 'eloquent' in your auth.php config.

'driver' => 'eloquent',

This will tell laravel to use your Eloquent model as the user object instead of the generic user object from the database table.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top