每次使用Ajax调用时,Laravel 5哈希都会更改

时间:2015-05-28 06:35:48

标签: ajax laravel hash laravel-5 bcrypt

以下是点击按钮时调用的模态

<div class="modal-dialog">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                                    <h4 class="modal-title" id="myModalLabel">Compose New Task</h4>
                                </div>
                                <div class="modal-body db">
                                    <div class="form-group db">
                                    <label class="col-sm-6 control-label">Current Password </label>
                                        <div class="col-sm-6">
                                            <input type="password" id="current_password" class="form-control">
                                            </div>
                                    </div>

                                    <div class="form-group">
                                        <label class="col-sm-6 control-label">New Password </label>
                                        <div class="col-sm-6">
                                            <input type="password" id="new_password" class="form-control">
                                            <input type="hidden" value="{{ csrf_token() }}" id="csrftoken">
                                        </div>
                                    </div>

                                    <div class="form-group">
                                        <div class="error" id="message"></div>
                                    </div>

                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                                    <button type="button" class="btn btn-primary" id="updatePassword">Save changes</button>
                                </div>
                            </div>
                        </div>

上述代码中的相关行是11号

$("#updatePassword").click(function () {

var current_password = document.getElementById('current_password').value;
var new_password = document.getElementById('new_password').value;
var token = document.getElementById('csrftoken').value;

$.post('/modalupdatePassword', {'current_password': current_password, 'new_password': new_password, '_token': token}, function (data) {

    var parsed = JSON.parse(data);
    console.log(parsed);

    $('#message').append(parsed);

});
});

这是我的modalPasswordUpdate函数

public function modalUpdate(Request $request)
{
    $current_password = bcrypt($request->current_password);
    $updateRequest = User::where('id', Auth::user()->id)
        ->where('password', $current_password)
    ->first();

    echo json_encode($current_password);

}

现在每次发送请求时我都会得到不同的哈希

以下是我更新的代码

Route::get('check', function()
{
echo $password = Hash::make('secret');
});

每次都会返回新密码

1 个答案:

答案 0 :(得分:1)

您通过邮寄方式发送请求。 Laravel文档指出,VerifyCsrfToken中间件将在发布请求期间查找X-CSRF-TOKEN个请求标头,因此请尝试以下操作。

将令牌添加到文档头部的元标记中。

<meta name="csrf-token" content="{{ csrf_token() }}" />

现在将X-CSRF-TOKEN作为标题添加到全局ajax设置中,如此

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

现在所有AJAX请求都会自动包含CSRF令牌。

您可以在Laravel docs here上了解更多相关信息。