检索存储在db中的密码

时间:2016-07-25 04:01:40

标签: laravel-5.2

我为我的应用创建了用户个人资料。在此用户配置文件中,用户可以像电子邮件地址,密码,位置,公司名称等更新其信息。如果用户想要更改其中一个信息,用户需要提供当前密码。我将验证用户提供的当前密码是否正确。错误是我无法验证用户提供的当前密码。以下是我的用户控制器代码的一部分。

if($request['current_pwd'])
        {
            if($request['new_pwd'])
            {
                if($user->password == bcrypt($request['current_pwd']))
                {
                    $user->password = bcrypt($request['new_pwd']);
                }else{
                    return redirect()->back()->with(['message' => 'Wrong current password !']);
                }
            }elseif($user->password == bcrypt($request['current_pwd']))
            {
                $user->save();
            }else{
                return redirect()->back()->with(['message' => 'Wrong Current Password ! Check Again!']);
            }
        }else{
            return redirect()->back()->with(['message' => 'Please enter your current password !']);
        }

如果用户想要更改当前密码,用户必须输入当前密码,新密码,。如果当前密码等于db中存储的密码,则将更新新密码。如果没有,请返回消息。

3 个答案:

答案 0 :(得分:3)

试试这个 首先在控制器中包含Hash命名空间,

use Illuminate\Support\Facades\Hash;

并使用以下条件确保输入的当前密码有效

 if($request->has('current_password')){
        $current_password = $request->input('current_password');
        if(!Hash::check($current_password,Auth::user()->password)){
            return redirect()->back()->withInput()->withErrors([
                'current_password' => 'You current password doesnot match with the logined user\'s !'
            ]);
        }
    }

答案 1 :(得分:1)

您应该将加密的“当前密码”条目与用户已有的密码相匹配。您可以使用函数Auth::user()

获取用户的密码

所以你的情况会是:

if(bcrypt($request['current_pwd']) == Auth::user()) {
    // Do password change
} else {
    // Invalid password error
}

还有另一个功能:getAuthPassword()可以通过指定用户ID来使用,如下所示:

$user = User::find('1');
$user->getAuthPassword();

这将获取用户ID 1

的密码

答案 2 :(得分:0)

由于腌制!这种$user->password == bcrypt($request['current_pwd']检查不起作用!

  

尝试制作相同密码的哈希值,你会得到不同的哈希值!

所以在laravel 5.2中这样检查

$crypt = new Hashing\BcryptHasher();
$match = $crypt->check($user->password, $request['current_pwd']);