Php Laravel密码更改检查

Php Laravel密码更改检查,php,laravel,laravel-4,Php,Laravel,Laravel 4,在Laravel4中,我有以下条件来查看用户是否正确插入了当前密码,如果是,则执行一些操作 代码如下: if(Auth::user()->password==Hash::make(Input::get('old_password')) ) { echo 'done'; } 但它不符合条件。为什么?因为散列的一部分是盐,它永远不会是一样的。您需要使用Hash::check方法,该方法知道如何正确操作。所以 if (H

在Laravel4中,我有以下条件来查看用户是否正确插入了当前密码,如果是,则执行一些操作

代码如下:

if(Auth::user()->password==Hash::make(Input::get('old_password')) )
           {
               echo 'done';
           }

但它不符合条件。为什么?

因为散列的一部分是盐,它永远不会是一样的。您需要使用
Hash::check
方法,该方法知道如何正确操作。所以

if (Hash::check(Input::get('old_password'), Auth::user()->password)) { 
    echo 'done';
}

如果您的最终目标是确保用户是他/她所说的用户,那么验证也是一个选项

$credentials = ['email' => Auth::user()->email, 'password' => Input::get('old_password')];

if (Auth::validate($credentials)) {
    echo "Successful";
}

传递给Auth::validate的“password”应该是明文密码,而不是散列密码。您可以分享原因吗?如果我在确保用户输入正确密码时出错,我想知道!。你做错了两件事。首先,您要从数据库中传递密码,因此它将始终是“正确的”,但随后它将是一个散列,进入需要纯文本的检查。这里应该输入您的密码,而不是用户模型的密码。对不起,我跳枪了。我检查了我的文件,但忽略了一个事实,即我总是在与Input::get通信时使用它。我正在删除它,只是想有人帮我澄清一下。事实上,我刚刚更正了它。我注意到他正在使用Input::get。我的错误。您应该将刚才传递的参数的位置切换到
hash::check()
干杯,我让人检查了它,因为我很懒,不打算检查顺序,但他们显然欺骗了我,所以我错了。fuuu@andreasit应该是
if(Hash::check(Input::get('old_password'),Auth::user()->password))
是的,我的错,当我第一次编辑这篇文章时,我显然没有太多注意