如何在laravel中使用我自己的类进行身份验证?

时间:2014-04-22 20:09:16

标签: php authentication login laravel

我正在尝试进行考虑电子邮件和密码的基本身份验证。当我调用方法Auth :: attempt时出现问题,我收到以下错误。

enter image description here

模型

class Usuario extends Eloquent{
    protected $table = 'Usuario';
    protected $primaryKey = 'idUsuario';
    protected $fillable = array('Nombre', 
                            'Apellido', 
                            'TipoUsuario', 
                            'Contrasena', 
                            'Correo', 
                            'Telefono');
}

控制器

class UsuarioController extends BaseController{
    public function doLogin(){
        $rules = array('correo' => 'required|email',
                        'contrasena' => 'required');

        $validator = Validator::make(Input::all(), $rules);
        if($validator->fails()){
            return Redirect::to('usuario')
                    ->withErrors($validator)// manda los errores al login
                    ->withInput(Input::except('contrasena')); //

        }else{
            $userData = array(
                        'Correo' => Input::get('correo'),
                        'Contrasena' => Input::get('contrasena')
                        );

            if(Auth::attempt($userData)){
                echo 'bien';
            }else{
                return Redirect::to('login');
            }
        }
    }

    public function showLogin(){
        return View::make('login');
    }
}

Routte

Route::get('usuario', array('uses' => 'UsuarioController@showLogin'));
Route::post('usuario', array('uses' => 'UsuarioController@doLogin'));

Auth.php

return array(
    'driver' => 'database',
    'model' => 'User',
    'table' => 'Usuario',
    'reminder' => array(
        'email' => 'emails.auth.reminder',
        'table' => 'password_reminders',
        'expire' => 60,
    ),
);

2 个答案:

答案 0 :(得分:1)

我要检查以确保您将正确的信息传递给控制器​​中的Auth :: attempt()。我使用的更像是:

$userData = array('email' => Input::get('email'), 'password' => Input::get('password'));

答案 1 :(得分:1)

在检查用户凭据Laravel调用validateCredentials时调用Auth::attempt方法的过程中,在此函数中(下面给出)Laravel检查password在传递的数组中键入,在您的情况下,您没有传递password键,因此发生错误。

public function validateCredentials(UserInterface $user, array $credentials)
{
    $plain = $credentials['password'];

    return $this->hasher->check($plain, $user->getAuthPassword());
}

更改key数组中的$userData

$userData = array(
    'email' => Input::get('correo'), // If correo means email
    'password' => Input::get('contrasena') // If contrasena means password
);

同时在数据库表的字段名称中进行更改,代表users表,我认为它是您的Usuario表。