401 通过 Ajax 对 Laravel 中的 RESTful API 进行未经授权的 DELETE 请求

2023-12-11

我使用创建了一个宁静的 APIlaravel控制器。我有一个PhotosController其中有一个destroy($id)资源删除方法。我也有一块javascript发送的代码DELETE向我的应用程序请求。结果应该是删除照片$idID。但 laravel 不会将我的请求路由到destroy方法。相反,它发送一个401 未经授权 error.

事情是我想发送DELETE通过向我的应用程序请求Ajax, but laravel不允许我的请求被路由!

路线.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();
        }
    }
);

感谢您的帮助。


我一直在 Laravel 应用程序中执行此类操作,没有出现任何问题。此代码允许用户通过 AJAX 删除资源,同时首先显示引导确认对话框。代码按照事件发生的顺序排列。

查看并删除资源

<a class="delete-plan" href="{{ route('admin.plans.destroy', $plan['id']) }}" data-redirect="{{ route('admin.plans.index') }}" data-plan-name="{{ $plan['name'] }}" data-lang="billing.plans">
    <i class="fa fa-trash fa-lg"></i>
</a>

JQUERY 提示确认模式

$('.delete-plan').on('click', function(e) {
    e.preventDefault();

    var data = {
        'route':        $(this).attr('href'),
        'redirect':     $(this).data('redirect'),
        'modal_title':  'Delete Plan',
        'content_view': 'Are you sure you want to delete plan: <strong>' + $(this).data('plan-name') + '</strong>?',
        'lang':         $(this).data('lang')
    };

    loadDestroyModal(data);
});

function loadDestroyModal(data) {
    $.get('/ajax/destroy-modal', { data: data }, function(modal) {
        $('body').append(modal);
        $('#destroy-modal').modal('show');
    });
}

AJAX控制器

// routed by /ajax/destroy-modal
public function destroyModal() {
    $data = Input::get('data');

    $params = [
        'route'    => $data['route'],
        'redirect' => $data['redirect'],
        'title'    => $data['modal_title'],
        'content'  => $data['content_view'],
        'lang'     => $data['lang']
    ];

    return View::make('_helpers.modal-destroy', $params);
}

销毁确认模态 (_helpers.modal-destroy)

<div id="destroy-modal" class="modal fade">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">
                    <span aria-hidden="true"><i class="fa fa-times"></i></span>
                    <span class="sr-only">Close</span>
                </button>
                <h4 class="modal-title">{{ $title }}</h4>
            </div>
            <div class="modal-body">
                {{ $content }}
            </div>
            <div class="modal-footer">
                <button id="modal-confirm" type="button" class="btn btn-primary" data-route="{{ $route }}"
                data-redirect="{{ $redirect }}" data-lang="{{ $lang }}">Confirm</button>
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

JQUERY处理销毁方法和重定向Flash消息

$('body').on('click', '#destroy-modal #modal-confirm', function(e) {
    var redirect = $(this).data('redirect');
    var lang     = $(this).data('lang');

    $(this).html('<i class="fa fa-spinner fa-spin"></i> Please Wait');

    $.ajax({
        'url':     $(this).data('route'),
        'type':    'DELETE',
        'success': function(response) {
            if (response) {
                redirectWithFlashMessage(redirect, 'destroy', 'success', lang);
            } else {
                redirectWithFlashMessage(redirect, 'destroy', 'errors', lang);
            }
        }
    });
});

计划控制员

public function destroy($id)
{
    try
    {
        Stripe::plans()->destroy(['id' => $id]);

        return Response::json(TRUE);
    }
    catch (Exception $e)
    {
        return Response::json(FALSE);
    }
}

JQuery 重定向

function redirectWithFlashMessage(redirect, type, status, lang) {
    var params = {
        type:   type,
        status: status,
        lang:   lang
    };

    $.get('/ajax/flash', params, function(response) {
        window.location.href = redirect;
    });
}

AJAX 控制器(使用 Flash 重定向)

public function flashData() {
    $message_type = 'success' == Input::get('status') ? 'success' : 'failure';

    $message = Lang::get(Input::get('lang'))[Input::get('type') . '_' . $message_type];

    Session::flash($message_type, $message);

    return ['status' => $message_type, 'message' => $message];
}

这是很多代码,但一旦设置就非常容易复制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

401 通过 Ajax 对 Laravel 中的 RESTful API 进行未经授权的 DELETE 请求 的相关文章

  • 仅当表单已提交时才触发 jQuery 表单验证?

    不引人注目的验证基于这样的想法 don t进行表单验证 直到用户提交表单 一旦发生这种情况 如果表单上的某些内容无效 那么一旦用户更改了每个字段 就会立即验证它 我想做的是 不显眼地 触发表单元素的验证 也就是说 only如果用户已尝试提交
  • 如何重新加载 jquery dropkick 对象

    我使用一个简单的选择列表和 jquery dropkick 库来使其美观 现在我想在更改相应的选择元素后更改 dropkick 内容 出现了一个新选项 但只需调用 select dropkick 不起作用 而且好像不支持 只需从头开始重建那
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • jQuery 插件不能很好地与 Angularjs 配合使用

    我用过jQuery 滑块在我的项目中 我使用 Angular 加载图像 我目前的观点是这样的 div div class slides container a href img width 919 height 326 alt a div
  • 为什么点击内容后放大的ajax弹出框会关闭

    请帮助我 我一直在尝试让放大的弹出ajax框显示登录表单 似乎表单出现了 但是一旦我单击表单或ajax主体中的任意位置 它就会消失 下面是代码 document ready function ajax popup link magnific
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • 如何处理 ASP.net MVC Ajax 加载页面上的 jQuery 事件?

    我有一个问题 我是 jQuery Mobile 领域的新手 对于 ASP Net MVC 部分我有点迷失 这是我的问题 在我的移动网站中 我想更改导航栏 我使用的更像是应用程序栏 按钮 而我位于编辑页面或主页等 因此 这些页面 编辑 显示
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 从所有会话中注销

    我有一个注销选项 这是我的代码 session start session destroy setcookie key time 60 60 24 setcookie username time 60 60 24 我想添加另一个选项来注销所
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • 优雅降级 - 何时考虑

    在为使用 AJAX 的应用程序设计和构建 UI 时 您何时考虑优雅降级 对于禁用 JavaScript 或正在使用屏幕阅读器的用户 最后 网站的 AJAX 版本完全完成后 在每个发展阶段 I don t 还有别的事 这些日子 渐进增强 ht
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • 单击引导分页链接时调用 jquery 函数

    我想在单击引导分页链接时调用 jquery 函数 假设我想从第1页遍历到第2页 应该调用一个jquery函数 我正在使用以下代码 但它不起作用 ul pagination on click li function alert page ch
  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • 在 C++ 程序中添加不必要的大括号 { } 是否会减慢速度?

    这可能是一个愚蠢的问题 但我对 C 和一般编程很陌生 我在这里找不到答案 我知道在 C 中 在某些情况下是可选的 例如 如果您有一个简单的 if 语句 其中仅执行一个操作 则不需要用 将其括起来 我只是想知道额外的括号是否对程序的速度有任何
  • 使用链接器脚本重命名符号

    是否可以使用链接描述文件或映射文件来重命名符号 我正在尝试修改一些用 C 和 Fortran 混合编写的代码 以便它可以在 Linux 上与多个 Fortran 编译器一起工作 目前它是为 Solaris Studio 编译器编写的 并且启
  • Volley - NetworkImageView 有时不显示错误图像?

    所以我决定尝试一下新的排球库如上所示谷歌IO 2013 我在使用简单的解决方案时尝试过NetworkImageView在一个上显示多个图像GridView 它运行良好并显示图像 但如果我让它下载图像 然后在下载过程中关闭 WiFi 它不会显
  • Visual Studio 2010 Professional Beta 2 上的 Windows Mobile 6 Standard SDK 刷新安装问题

    当我安装Windows Mobile 6 标准 SDK 更新我收到错误 未安装 Visual Studio 2005 SP1 或更高版本 我安装了 Visual Studio 2010 Professional Beta 2 请你告诉我如何
  • 使用 props 以纯文本或数组访问对象路径

    考虑以下对象和存储在对象内的值的路径 var obj a 1 b a x 2 b 3 c 4 var path b a x 获取对象路径中的内容的最佳方法 最佳性能 是什么 使用 eval path obj concat path var
  • vba中dim和set有什么区别

    请原谅我 我是 VBA 新手 有时我用 Dim r as Range r Range A1 其他时候我用 Set r Range A1 有什么不同 我什么时候应该使用什么 没有理由使用set除非引用对象引用 最好只在这种情况下使用它 对于所
  • 画布上的 Android Center 文本

    我正在尝试使用下面的代码显示文本 问题是文本没有水平居中 当我设置坐标时drawText 它将文本的底部设置在此位置 我希望绘制文本 以便文本也水平居中 这是进一步显示我的问题的图片 Override protected void onDr
  • Toast 类型中的方法 makeText 不适用于参数

    我正在使用 ViewPagerIndicator 并尝试使用 Toast 在滚动到下一个片段页面时显示 我收到以下错误 The method makeText Context CharSequence int in the type Toa
  • C# 获取文件更改事件

    我确实有一个程序可以在文本文件中记录一些特定事件 它使文件保持打开状态 现在我想编写第二个应用程序 在表单上显示这些日志 我可以为另一个进程打开的文本文件中的任何更改设置事件吗 或者我必须定期阅读 thanks 看看文件系统观察者类
  • 选择对不同数据库服务器上的 2 个表进行查询

    我试图通过在经典 ASP 中查询 2 个数据库 Sybase 来生成报告 我创建了 2 个连接字符串 数据库的 connA数据库 B 的 connB 两个数据库都存在于同一服务器上 不知道这是否重要 Queries q1 SELECT co
  • 如何读写Excel文件

    我想从 Java 读取和写入一个 3 列 N 行的 Excel 文件 在每个单元格中打印一个字符串 谁能给我简单的代码片段 我是否需要使用任何外部库或者 Java 是否有内置支持 我想做以下事情 for i 0 i
  • 尝试从谷歌搜索编辑框获取并打印数据,但出现 InvalidElementStateException

    我试图在谷歌搜索编辑框中写一个单词并捕获所有相关的列表项并显示它 但在这样做时我遇到了例外 org openqa selenium InvalidElementStateException 元素已禁用 因此不能用于操作 我经历了相同的异常相
  • 如何从另一个组件调用一个组件方法?

    我有一个包含按钮的标题组件 我希望该按钮在单击时显示另一个组件 模式页面 我可以做这样的事情吗 这是我的标题组件 import ComponentToDisplay from components ComponentToDisplay in
  • DirectShow 过滤器未显示为输入捕获设备

    从捕获源过滤器的优秀示例开始here我编写了自己的输入捕获设备 该设备在 Graph Studio Next 中运行良好 但在 Skype 或类似应用程序中并未显示为捕获设备 即网络摄像头 因为我想了解发生了什么 所以我请您帮助我找出那些应
  • 如何使用nodejs读取.pdf文件的内容?

    我有一个自动化 PDF 内容的方案 如何在nodejs中检索PDF文件的内容 我对此完全被封锁了 虽然帖子很少pdf2jsona and jsonreader但那些对我不起作用 任何帮助将不胜感激 var pdfParser new PDF
  • 是或否:服务器能否发送 HTTP 响应,同时仍从相关 HTTP 请求上传文件?

    如果网站用户使用以下方式提交 HTML 表单 1 post 方法 2 多部分 表单数据编码类型 3 附件很大 服务器是否可以上传发布的文件 并在文件上传完成之前发送服务器生成的 HTTP 响应 而不使用 AJAX 这是相当密集的 因此 我写
  • 如何在 C# 中使用 SqlDataReader 获取行数

    我的问题是如何使用查询返回的行数SqlDataReader在 C 中 我已经看到了一些关于此问题的答案 但没有一个明确定义 除了一个声明执行 while 循环的答案Read 方法并增加一个计数器 我的问题是 我试图填充一个多维数组 第一行是
  • “setenforce 0”如何以及为何允许 Java 7 运行? [关闭]

    Closed 这个问题是无关 目前不接受答案 我对我正在开发的程序进行了一些更改 并将 Java 从 Java 6 更新到了 Java 7 我在 CentOS 5 8 32 位虚拟机上运行该程序 在 Java 更新之前 它运行良好 现在该过
  • API:Spotify上基于推文的音乐推荐,需要word2vec还是doc2vec?

    我想设计一个推荐系统 根据使用主题标签 nowplaying 的推文推荐用户歌曲 最初 我想权衡他们的推文并逐字分析 看看他们是否在推文中发布了有关某些歌曲的任何内容 但这似乎需要我更多的时间 由于我不会分析每条推文 而只是查找包含主题标签
  • 401 通过 Ajax 对 Laravel 中的 RESTful API 进行未经授权的 DELETE 请求

    我使用创建了一个宁静的 APIlaravel控制器 我有一个PhotosController其中有一个destroy id 资源删除方法 我也有一块javascript发送的代码DELETE向我的应用程序请求 结果应该是删除照片 idID