今天由于项目的需要,博主需要做一个修改密码的功能,项目用到的是laravel框架,但是没想到他里面的Hash::make()跟之前写过的md5()有很大的差别,下面总结一下,项目的具体信息请前往我的github

前端界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{{--修改密码--}}
<form action="{{ route('changepwd') }}" method="post">
{{{ csrf_field() }}}
<div class="layui-form-item">
<label for="L_nowpass" class="layui-form-label">当前密码</label>
<div class="layui-input-inline">
<input type="password" id="L_nowpass" name="oldpass" required lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="L_pass" class="layui-form-label">新密码</label>
<div class="layui-input-inline">
<input type="password" id="L_pass" name="password" required lay-verify="required" autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">6到16个字符</div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">确认密码</label>
<div class="layui-input-inline">
<input type="password" id="L_repass" name="password_confirmation" required lay-verify="required" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">

<button class="layui-btn" key="set-mine" lay-filter="*" >确认修改</button>
</div>
</form>
{{--修改密码--}}

路由文件

1
2
//修改用户密码
Route::post('/changepwd', 'PasswordController@changepwd')->name('changepwd');

Request验证类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'password'=>'required|min:6|max:16|confirmed', // confirmed: password 和 password_confirmation是否相同
];
}
}

控制器引入类

1
2
use DB;
use Hash;

控制器代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//修改密码
public function changepwd(PasswordRequest $req){
$users = DB::table('users')
->where('id', '=', session('id'))
->first();
//判断用户输入的密码与数据库的密码是否一致
// 表单中的密码:$req->password (原始)
// 数据库的密码:$user->password (哈希之后 )
// laravel中 Hash::check(原始,哈希之后)判断是否一致
if( Hash::check( $req->oldpass , $users->password ) ){
//更新密码并且保存
DB::table('users')
->where('id', session('id'))
->update(['password' => Hash::make($req->password)]);
// 跳转到 登录页
return redirect()->route('login');
}else{
return back()->withErrors(['oldpass'=>'密码不正确!']);
}

}

==这里遇到的坑就是laravel框架中,每次hash的值都是不一致的,跟之前写过的md5不一样,md5是唯一的,但是只要保存进去了,就算hash以后的值是不一样的,但是都是代表一个东西的,比如说,你hash的是111111,就算hash两次的值不一致,但是并不会影响你的代码逻辑的,只要正常判断即可,laravel不愧为排名第一的框架,果然很优雅!!!!==