我正在尝试使用存储在我的数据库中的散列密码检查表单输入。但出于某种原因,检查是针对用户名而不是密码运行的。现在,我的问题是,我是不是没有以正确的方式使用这些命令,还是我只是忘记了什么?这是我的代码:
在 route.php 中
Route::get('/{user}/confirm', 'PagesController@confirm');
在 PagesController.php 中
public function check(User $user)
{
return view('users.check', compact('user'));
}
public function confirm(User $user, Request $request)
{
echo "Input = " . $request->input('check');
echo "<br>";
echo "Password in DB = " . $user->password;
echo "<br>";
echo "Username = " . $user->username;
if (Hash::check($request->input('check'), $user->password))
{
echo "<br>Correct Password.";
} else {
echo "<br>Incorrect Password.";
}
最后,在 check.blade.php 中
@extends("master")
@section("content")
<h2>Check User:</h2>
<h3 class="text-success">{{ $user->username }}</h3>
{!! Form::model($user, ['url' => '/' . $user->slug . '/confirm', 'method' => 'GET']) !!}
<div class="form-group">
<div class="row">
<div class="col-xs-4">
{!! Form::label('check', 'Password') !!}
{!! Form::text('check', null, ['class' => 'form-control']) !!}
</div>
</div>
</div>
<div class="form-group">
{!! Form::submit('Check Password', ['class' => 'btn btn-primary']) !!}
<a href="/" class="btn btn-primary">Cancel</a>
</div>
{!! Form::close() !!}
@stop
现在,在我的数据库中,我有一个名为 test 的用户,密码为 1234。如果我在检查密码字段中输入“1234”,我会得到“不正确的密码”。但是,如果我输入“测试”,它会返回“正确的密码”。
我是编程新手..可能值得一提。
最佳答案
一切似乎都是您使用与用户名相同的密码创建的用户。
您应该查看创建用户的方法,它应该是:
$user = new User();
$user->name = $request->input('name');
$user->password = Hash::make($request->input('password'));
$user->save();
我认为现在您创建用户的过程如下所示:
$user = new User();
$user->name = $request->input('name');
$user->password = Hash::make($request->input('name'));
$user->save();
因此您创建的不是密码字段而是名称字段,这就是为什么当您传递用户名时 Hash::check
为真,而当您传递密码时为假。
关于php - 根据要求进行 Laravel 哈希检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365284/