如何使用自定义登录表单比较Laravel的哈希密码?

Jer*_*lle 6 php hash laravel

你能帮帮我吗?我正在使用Laravel构建自己的登录表单.但我有一个问题,因为我使用Hash方法存储了我的密码,在我的登录表单中,我再次使用哈希方法进行比较.但我发现哈希值总是在变化.

这是我在路线中的代码:

Route::post('/admin_handle_login', function()
{

    $rules = array(
        'admin_username'    =>  'required',
        'admin_password'    =>  'required'
    );

    $validate_admin_login = Validator::make(Input::all(), $rules);

    if($validate_admin_login->fails()) {

        $messages = $validate_admin_login->messages();

        Session::flash('warning_notification','Error: Incomplete details!');

        return Redirect::to('/flaxadmin')
                            ->withErrors($messages)
                            ->withInput(Input::except('admin_password'));

    } else {

        $d = array(
            Input::get('admin_username'), Hash::make(Input::get('admin_password'))
        );

        $validate_admin = DB::table('administrators')
                            ->select('username')
                            ->where('username', Input::get('admin_username'))
                            ->where('password', Hash::check('password', Input::get('admin_password')))
                            ->count();
        fp($d);
        fp($validate_admin);

    }

});
Run Code Online (Sandbox Code Playgroud)

结果是

Array
(
    [0] => admin002
    [1] => $2y$10$RTwKHN9W1/unu1ZhYlNjauApJjjoNTBnE6td/AZ5jWgZEdqVav0um
)
0
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,admin002的密码是

$2y$10$47sSXLzh/YXN6Rf2fmljYO7lZaxfhXVSUTp5bssR2gYQ6Nw9luUH2
Run Code Online (Sandbox Code Playgroud)

我的代码错了吗?或者有没有正确的方法来做到这一点?我是Laravel的先生.

Mar*_*łek 9

首先,你不能这样做.假设username是唯一的,你应该这样做:

$validate_admin = DB::table('administrators')
                            ->select('username')
                            ->where('username', Input::get('admin_username'))
                            ->first();

if ($validate_admin && Hash::check(Input::get('admin_password'), $validate_admin->password)) {
  // here you know data is valid
}
Run Code Online (Sandbox Code Playgroud)

但是你应该考虑使用内置方法而不是自己编写代码.您有Auth::attempt或者Auth::validate如果您想要仅使用密码登录/检查用户,那么实际上不需要自己编码.