我正在使用带有 Yii 应用程序的 nginx 服务器。
我的问题是,Yii::app()->user->returnUrl
在成功登录后重定向我的 SiteController.php 中的值始终是 - mysite/index.php ,无论我来自哪个页面。
如何将其修复为上一页 URL 的值?
这是您看到的默认行为,如果您想更改,有一些选择!这些选择中的相同部分是您应该扩展 CWebUser 并添加功能
class WebUser extends CWebUser
{
}
&您需要并在配置中提及它
'user'=>array(
'class' => 'WebUser',
'loginUrl' => array('user/login'),
'defaultDashboard' => array('user/dashboard'),
)
完成了,现在的选择!如果你想要的 returnUrl 是固定的,在函数 beforeLogin 中设置它,你应该在 WebUser 类中重写这个函数并手动设置 returnUrl,更多信息在Official API for CWebUser。但是,如果 returnUrl 不固定并且您希望几乎为每个需要登录的操作设置它,那么您应该覆盖 loginRequired 函数
public function loginRequired() {
$app=Yii::app();
$request=$app->getRequest();
$controller=$app->controller;
$actionParameters=$controller->actionParams;
if(!$request->getIsAjaxRequest()) {
if(empty($actionParameters))
$this->setReturnUrl(array($controller->route));
else
$this->setReturnUrl(array($controller->route,$actionParameters));
}
if(($url=$this->loginUrl)!==null) {
if(is_array($url)) {
$route=isset($url[0]) ? $url[0] : $app->defaultController;
$url=$app->createUrl($route,array_splice($url,1));
}
$request->redirect($url);
}
else
throw new CHttpException(403,Yii::t('yii','Login Required'));
}
& 登录成功后最后一步防止循环
if($model->validate() && $model->login()){
$returnUrl=Yii::app()->user->returnUrl;
$url=(is_array($returnUrl))?$returnUrl[0]:$returnUrl;
if(isset($returnUrl)&&stripos(strtolower($url),'logout')==false&&stripos(strtolower($url),'login')==false) {
$this->redirect($this->createUrl($returnUrl[0],$returnUrl[1]));
} else {
$this->redirect($this->createUrl($returnUrl[0],$returnUrl[1]));
}