401未经授权通过Ajax对lalavel中的RESTful API发出DELETE请求

时间:2015-04-27 15:04:45

标签: php jquery ajax rest laravel

我使用 laravel 控制器创建了一个安静的API。我有一个PhotosController,它有一个destroy($id)资源删除方法。我还有一段 javascript 代码,可以向我的应用发送DELETE个请求。结果应该是删除$id id的照片。但是laravel没有将我的请求路由到destroy方法。相反,它会发送 401 Unauthorized 错误。

问题是我想通过DELETE向我的应用发送Ajax请求,但 laravel 并不允许我的请求被路由!

routes.php文件:

Route::resource('photos', 'PhotosController');

销毁方法:

public function destroy($id)
{
    try{
        unlink($_SERVER["DOCUMENT_ROOT"].'/uploads/doctors/' . $id);
        Session::forget('photo');
        $msg = Notification::where('flag', 's')->where('code', 'user-update-delete-photo-gallery')->first()->msg;
        return Response::json(array('success' => $msg));
    }catch (Exception $e){
        App::abort(500, $e->getMessage());
    }
}

我的Ajax请求:

$.ajax(
    {
        url: "/photos/" + name,
        method : "DELETE", // Or POST : result is the same
        data :{
            _token : $("input[name=_token]").val(),
            _method : 'DELETE'
        },
        success: function(data, textStatus, jqXHR ){
            parent.replaceWith("");
            toastr.success(data['success']);
            $("#overlay").hide();
        },
        beforeSend : function(jqXHR, settings ){
            $("#overlay").show();
        },
        error : function(jqXHR, textStatus, errorThrown ){
            toastr.error(jqXHR.responseText);
            $("#overlay").hide();
        }
    }
);

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您的系统需要对控制器操作进行身份验证“销毁”方法。所以你需要在调用该方法之前登录。

如果您正在使用中间件“auth”(app \ Http \ Middleware \ Authenticate.php),您可以轻松找到返回“未授权”错误的“句柄”功能。

希望这会有所帮助。