2014-10-30 82 views
1

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

这是我在航线代码:

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

    } 

}); 

结果是

Array 
(
    [0] => admin002 
    [1] => $2y$10$RTwKHN9W1/unu1ZhYlNjauApJjjoNTBnE6td/AZ5jWgZEdqVav0um 
) 
0 

在我的数据库admin002的密码是

$2y$10$47sSXLzh/YXN6Rf2fmljYO7lZaxfhXVSUTp5bssR2gYQ6Nw9luUH2 

是我的代码错了吗?或者有没有适当的方法来做到这一点?我是Laravel的一个初学者。

+0

您将需要做的是使用该用户名查找数据库中的所有用户。那么你将不得不检查每个帐户的密码。 – Jerodev 2014-10-30 08:31:31

+0

我知道。但是我使用了散列函数,并且每当页面重新加载或刷新时都会随时更改。因此,如果我使用123作为密码,并且在我的数据库中也是123,但它们是不同的散列值。这就是为什么我无法得到确切的价值 – Jerielle 2014-10-30 08:38:45

回答

4

首先,你不能这样做。假设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 
} 

但是你应该考虑使用,而内置的方法比你的编码它。你有Auth::attemptAuth::validate如果你想登录/只检查用户的密码,所以真的不需要自己编码。

+0

如果没有用户存在,会发生什么? – 2014-10-30 08:48:46

+0

@DanielGelling我在if语句 – 2014-10-30 08:50:01

+0

的开头添加了'$ validate_admin &&'Ok我已经使用过模型USER,但我不知道如何更改或覆盖模型USER中的表格。我所知道的是Auth :: validate正在使用User模型类。我在我的客户帐户中使用了它,并且它正在工作,所以我决定为我的管理帐户创建另一个登录名 – Jerielle 2014-10-30 08:51:53

2

这里您正在使用输入密码的散列版本检查字符串'password'。

因此,请尝试通过用户名获取用户,如果您有结果,您可以将存储在数据库中的密码的散列版本与输入密码进行比较。像这样:

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

if($user->count()) { 
    $user = $user->first(); 
    if(Hash::check(Input::get('admin_password', $user->password)) { 
     //User has provided valid credentials :) 
    } 
}