【问题标题】:Why the Auth::attempt method always returns false?为什么 Auth::attempt 方法总是返回 false?
【发布时间】:2014-06-15 14:44:02
【问题描述】:

我正在尝试进行基本身份验证,当我尝试对用户进行身份验证时,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并重定向我登录,数据库时使用不正确的数据

【问题讨论】:

    标签: php authentication laravel laravel-4


    【解决方案1】:

    导致它每次都返回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) 你有一个验证,所以问题可能出在它上面。添加另一个 die 消息以确保:

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

    【讨论】:

    • 1.我改变了,什么都没发生。 2.我的应用程序中没有使用迁移,密码大小为100 3.我在模型和数据库中修复了它,没有任何反应。 4. 我收到正确的输入。 5. 验证不会失败。
    • 所以在 3. 你仍然一无所获(假)?如果 3 不起作用,则什么都不起作用。
    • $userData = array('email' =&gt; Input::get('email'),'password' =&gt; Hash::make(Input::get('password'))); return Auth::attempt($userData) show....The Response content must be a string or object implementing __toString(), "boolean" given.
    • 您必须将其转换为字符串。而且你不需要散列来尝试,只需存储在数据库中。编辑显示如何。
    • 您的数据库仍有问题。检查密码是否真的经过哈希处理。并且,请向我们展示您的用户创建控制器方法。
    猜你喜欢
    • 2014-03-15
    • 2017-03-25
    • 2012-10-25
    • 1970-01-01
    • 2016-09-12
    • 2017-05-24
    • 2013-06-11
    • 2015-12-10
    相关资源
    最近更新 更多