怎么限制user module必须登录才能访问 [ 2.0 版本 ]
frontend/modules/user/Module.php
namespace frontend\modules\user;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'frontend\modules\user\controllers';
public function init()
{
parent::init();
//该模块必须登陆用户访问
if (\Yii::$app->user->isGuest){
return \Yii::$app->response->redirect(\Yii::$app->homeUrl);
}
return true;
}
}
return \Yii::$app->response->redirect(\Yii::$app->homeUrl);
这端代码能执行,就是不能跳转
下面是在controller里面实现的逻辑
Application.php
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
if (Yii::$app->user->isGuest){
return $this->redirect(['site/index']);
}
return true;
}
同样能执行到跳转这边,就是跳转不来
解决方案
user module 所有controller都会继承该ApplocationController
<?php
namespace frontend\modules\user\controllers;
use Yii;
use yii\web\Controller;
class ApplicationController extends Controller
{
public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}
if (Yii::$app->user->isGuest){
return $this->goHome()->send();//这边需要家send(),不然无法跳转,Yii 2.0.7
}
return true;
}
}
最佳答案
-
个人感觉逻辑不太对,登录认证应该在控制器中就控制了,而不是应该在模型中去判断,请求肯定是先到控制器,然后对应的action中进行处理,action负责加载一个数据模型,一般是从数据库中加载。那么,如果这个用户没有登录,应该在加载模型之前就判断好
共 4 条回复@javalzbin 按照你说的,但还是一样的问题,同样能执行到跳转代码,但就是不跳转。代码我放上面去
@javalzbin 非常感谢,我让他在controller这边处理了,然后在跳转的后面加上send()就OK了。这应该是2.0.7的问题,我以前用2.0.6的时候第一种方法是能实现的。
其他 2 个回答
legend 上海普陀
注册时间:2014-08-18
最后登录:2021-04-21
在线时长:299小时28分
最后登录:2021-04-21
在线时长:299小时28分
- 粉丝8
- 金钱3455
- 威望20
- 积分6645