【问题标题】:Redirect user to previous page after auth (yii2)身份验证后将用户重定向到上一页(yii2)
【发布时间】:2014-06-07 19:01:19
【问题描述】:

我有一个主控制器,其他控制器是从它继承而来的。代码是这样的

public function init()
{
    $this->on('beforeAction', function ($event) {
        ...

        if (Yii::$app->getUser()->isGuest) {
            $request = Yii::$app->getRequest();
            // dont remember login page or ajax-request
            if (!($request->getIsAjax() || strpos($request->getUrl(), 'login') !== false))                  {
               Yii::$app->getUser()->setReturnUrl($request->getUrl());
              }
           }
        }
        ...
    });
}

它适用于所有页面,除了带有验证码的页面。所有带有验证码的页面都被重定向到这样的东西 - /captcha/?v=xxxxxxxxxxxxxx

如果对象被记录 Yii::$app->getRequest() 那么我看到对于带有验证码的页面它被使用了两次。第一次对象是正确的,第二次我看到带有验证码的对象。 如何用 yii 解决这个问题?是否有机会不跟踪验证码请求?

【问题讨论】:

    标签: yii2


    【解决方案1】:

    默认(生成的)控制器使用如下内容:

    public function actions()
    {
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
            ],
        ];
    }
    

    您的控制器是否包含类似的内容?

    这意味着有一个动作“captcha”用于显示验证码(它返回图像)。当您有一个显示验证码的页面时,该图像会在您要返回的页面之后调用。因此,最近访问的页面是带有验证码的页面。

    我认为你必须过滤掉这个动作。

    另一种可能性是使用默认的$controller->goBack() 方法。我认为这会默认处理returnUrl 的注册。

    参考:Class yii\web\Controller

    【讨论】:

    • 感谢您的回答
    • 我认为这不是正确答案,自定义 returnUrl 呢?例如,我想从 returnUrl 中排除一些控制器\操作\行为 - 我应该怎么做? $controller->goBack() 会让我回到他们身上......所以我需要在某个地方添加一些条件......
    【解决方案2】:

    Guid security authorization

    在您的控制器中使用访问控制过滤器 (ACF)。

    use yii\web\Controller;
    use yii\filters\AccessControl;
    
    class SiteController extends Controller
    {
        public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['login', 'logout', 'signup'],
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['login', 'signup'],
                            'roles' => ['?'],
                        ],
                        [
                            'allow' => true,
                            'actions' => ['logout'],
                            'roles' => ['@'],
                        ],
                    ],
                ],
            ];
        }
        // ...
    }
    

    【讨论】:

    • 你是否保存了returnUrl?问题是关于行为和保存返回网址... =\
    猜你喜欢
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多