Yii2 403在ajax调用期间被禁止

Posted

技术标签:

【中文标题】Yii2 403在ajax调用期间被禁止【英文标题】:Yii2 403 forbidden during ajax call 【发布时间】:2020-08-29 06:37:29 【问题描述】:

我在order/my-cart 中有jquery,我试图从order/delivery-verify 获取数据。我的javascript如下

$('form#Confirm').submit(function(event)
        event.stopPropagation();
        event.preventDefault();

        Core.ajax(
                type: "GET",
                dataType: "json",
                url: "/order/delivery-verify",
                data: $(this).serialize(),
                success: function (result) 
                    if (typeof (result.status) != 'undefined') 
                        if (result.status == 200) 
                            window.location.href = '/order/checkout';
                         else 
                            Core.handleInvalidServerResponse(result);
                        
                    
                
            );
    )

此脚本在 subdomain.example.com 中运行良好,但在另一台服务器 subdomain.example-one.com 中引发 403 错误

编辑 OrderController.php

<?php
namespace frontend\controllers;

use common\components\CErrorAction;
use common\helpers\Com;
use frontend\components\CController;
use frontend\models\User;
use yii;
use frontend\models\Configuration;
use yii\helpers\Json;
use yii\helpers\ArrayHelper;
use frontend\models\Order;
use common\helpers\Mailer;

use frontend\models\NewsletterSubscriber;
/**
 * Class SiteController
 * @package frontend\controllers
 */
class OrderController extends CController


    /**
     * @return array
     */
    public function actions()
    
        return [
            'error' => [
                'class' => CErrorAction::class
            ],
        ];
    

   /**
     *
     * @return type Json
     * @Title("Checkout verify")
     */
    public function actionDeliveryVerify()
    
    .....
    
......

【问题讨论】:

检查第二台服务器上该特定路径的权限。确保可以访问控制器操作 delivery-verify @HarishST 我无法从 OrderController 上的任何操作中得到响应 你的控制器中有behaviors() 方法吗? 查看此文档:yiiframework.com/doc/api/2.0/yii-filters-accesscontrol @HarishST OrderController 中没有行为方法 【参考方案1】:

public function accessRules()

    return array(
        array(
          'allow',
          'actions'=>array('delivery-verify'),
          'users'=>array('*'),
        )
    );


尝试在您的控制器中添加accessRules()。以上代码允许任何用户访问delivery-verify 操作。

Yii1.1官方API文档请点击以下链接: - Yii1.1 CController - Yii1.1 CAccessControlFilter - Authentication and Authorization

【讨论】:

同样的错误 403 禁止。我很困惑它在一台服务器上工作,而不是在另一台服务器上工作。 可能是检查文件的权限。 0644 是权限 其他控制器文件权限呢?尝试更改权限并检查是否有效。 所有文件都是0644。OK会更改并检查。

以上是关于Yii2 403在ajax调用期间被禁止的主要内容,如果未能解决你的问题,请参考以下文章

间歇性 HTTP 403 禁止错误调用相同的 Ajax 代码

在 Django 中使用 AJAX POST 请求进行 CSRF 检查期间禁止 403

Django ajax GET 403(禁止)

错误 403 禁止通过 ajax 请求服务器

Ajax CSRF 403 禁止代码点火器

Django + ajax(jquery):http错误代码403(禁止)[关闭]