我使用了Yii::app()->user->returnUrl
,但它始终将我重定向到localhost/index.php
。是否有任何特定的配置或一些代码,我必须编写其他程序?如果您有其他解决方案,请告诉我。
答案 0 :(得分:3)
@aslingga,你能解释一下你想用returnUrl做什么吗?你只是想回到登录后的位置,还是在其他地方使用它?
将用户浏览器重定向到 登录页面。在重定向之前, 当前的URL(如果它不是AJAX url)将保存在returnUrl中 可以重定向用户浏览器 之后回到当前页面 成功登录。确保你设置 loginUrl以便用户浏览器可以 被重定向到指定的登录 调用此方法后的URL。后 调用这个方法,当前 请求处理将被终止。
换句话说,如果您尝试请求的页面需要身份验证,则您所在页面的URI将存储在会话变量中。然后,一旦您登录,它将带您返回该页面。
我建议进行故障排除的一种方法是执行print_r($_SESSION);
只是为了确保实际存储了returnUrl。然后,您将能够检查index.php是否存储为returnUrl,或者您是否因某种原因被重定向到那里。
查看CWebUser方法getState和setState可能也会有所帮助。
答案 1 :(得分:3)
我知道这个问题很老但也许这会帮助别人,因为我无法在任何地方找到合适的答案。
为Yii应用设置默认返回网址需要进行一些自定义。开箱即用的方式是每次调用它时都指定默认的返回URL:
Yii::app()->user->getReturnUrl('site/internal');
这个想法是,如果用户要访问需要身份验证的页面,他们将被重定向到登录页面,但不会在网站运行之前
Yii::app()->user->setReturnUrl('site/visitedpage');
现在,当用户登录时,他们将返回到他们打算去的页面。
虽然我喜欢这个功能,但每次都必须设置默认的返回URL是愚蠢的。如果要更改默认返回URL,则必须在整个代码中找到它。我想你可以在站点参数中设置值并调用
Yii::app()->user->getReturnUrl(Yii::app()->params['defaultReturnUrl']);
我认为我不必解释为什么这个解决方案也很烦人。
因此,当没有任何参数调用 getReturnUrl 时,它会返回'/index.php'或只返回'/'。在某些情况下这很好,但并非总是如此。这是更好的IMO。
首先,扩展 CWebUser 类并添加以下附加内容
class WebUser extends CWebUser {
// default return URL property
public defaultReturnUrl;
// override the getReturnUrl method
public function getReturnUrl($defaultUrl=NULL) {
if ($defaultUrl === NULL) {
$defaultReturnUrl = $this->defaultReturnUrl;
}
else {
$defaultReturnUrl = CHtml::normalizeUrl($defaultUrl);
}
return $this->getState('__returnUrl',$defaultReturnUrl);
}
}
现在,让我们在用户组件数组中添加几个项目。
'user' => array(
'class' => 'WebUser',
'defaultReturnUrl' => 'site/internal'
)
这不仅允许您在配置中设置默认返回URL,还可以设置不同的默认返回URL并使用setReturnUrl功能。
答案 2 :(得分:0)
我想,你必须设置它:
Yii::app()->user->setReturnUrl('controller/action');