为什么Auth :: attempt方法总是返回false?

时间:2014-04-29 15:04:38

标签: php authentication laravel laravel-4

我正在尝试进行基本身份验证,当我尝试对用户进行身份验证时,Auth :: attempt方法返回false

刀片

   {{ Form::open(array('url' => 'usuario')) }}

                <input type="text" class="text"  id="email" name="email" placeholder="Correo" {{(Input::old('email')) ? 'value ="'. Input::old('email').'"' : '' }}>
                <p>{{ $errors->first('email') }}</p>
                <input type="text" class="text"  id="password" name="password" placeholder="Contraseña" >
                <p>{{ $errors->first('password') }}</p>


            {{ Form::submit('Ingresar', array('class' => 'bg1')) }}
{{ Form::close() }}

控制器

class UsuarioController extends BaseController{
public function doLogin(){
$rules = array(
                'email' => 'required|email',
                'password' => 'required'
                );
$validator = Validator::make(Input::all(), $rules);
if($validator->fails()){
    return Redirect::to('usuario')->withErrors($validator)->withInput(Input::except('password'));
}else{

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

    if(Auth::attempt($userdata)){
        return View::make('hello');
    }else{
        return Redirect::to('usuario');
    }

}
}
}

验证

'driver' => 'database',
'model' => 'Usuario',
'table' => 'Usuario',

模型

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class Usuario extends Eloquent implements UserInterface, RemindableInterface{
protected $table = 'Usuario';
protected $primaryKey = 'idUsuario';
protected $hidden = array('Contrasena');
protected $fillable = array(
                    'Nombre',
                    'Apellido',
                    'Tipo',
                    'password',
                    'email',
                    'Fono',
                    'Foto'
                    );
}

代码始终返回false并将我重定向到登录,在数据库

时使用不正确的数据

1 个答案:

答案 0 :(得分:3)

每次都有很多原因导致它返回false:

1)您的密码未正确存储/哈希,您必须哈希:

Hash::make($password);

这是一种通过Laravel正确创建用户和存储密码的方法:

$user = new User;

$user->email = 'example@domain.com';

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

$user->save();

2)您的密码列大小没有足够的空间来存储哈希密码。它必须至少为60个字节,但是使用以下命令进行迁移:

$table->string('password');

这是一个很好的做法,因为如果这个尺寸在未来以某种方式改变,你就不会有问题。

3)您没有用户使用您尝试登录的电子邮件(Correo)。仔细检查一下,因为这比我们想象的更频繁。您也可以尝试手动执行以查看它是否真的有效:

$userdata = array(
    'Correo' => 'youremail@domain.com',
    'Password' => 'password'
);

dd( Auth::attempt($userdata) );

4)您的表单未正确传递数据,请检查您的表单是否真的有效,并将其删除:

dd(Input::all());

并检查您是否获得了正确的数据。

5)你有一个验证,所以问题就在于它。添加另一个骰子消息以确保:

if($validator->fails())
{
    dd('Validation is failing!');

    ...
}

6)来自评论:

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

return (string) Auth::attempt($userData));

7)尝试手动创建不同的用户:

$user = new User;

$user->email = 'example@domain.com';

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

$user->save();

并使用它登录:

$userData = array('email' => 'example@domain.com', 'password' => 'passwordExample');            

return (string) Auth::attempt($userData));