yii2里面如何实现一个登录拦截器

新手提问 · leedotleo · 于 5年前 发布 · 8126 次阅读

我想实现一个拦截器, 对于所有action的请求,就行处理, 没有登录的就返回登录界面. 我现在的做法是实现了一个拦截器,如下:

class LoginFilter extends ActionFilter
{
    public function beforeAction($action)
    {
        if ($action->actionMethod == "actionLogin")
            return true;
        if ( Yii::$app->user->identity == null)
        {
            Yii::$app->request->redirect("/site/login");//这里有问题, 不能跳转
            return false;
        }else{
            return true;
        }


    }
}

这个拦截器里面怎么进行页面跳转, 这样写有没有什么问题?

我还有一个思路是:

如写一个BaseController, 里面实现一个beforeAction, 拦截工作交给这个beforeAction, 然后所有我的控制器继承这个BaseController

哪种方式更符合通用做法? Yii::$app->user->identity 这个的失效周期是多久?

共收到 4 条回复
leedotleo#25年前 0 个赞

@echo #1楼 这个就类似于我那个BaseController的想法, 还有没有别的实现方式?

Kittyfamous#35年前 0 个赞

actionLogin()里面触发个自定义事件回调。 或者省事些,直接在actionLogin里面调个function试下吧。

不知正确与否,仅供参数。

fecommerce#45年前 0 个赞

有一个简单的方法,就是做一个父类controller,里面的init() 中加入判断是否登录,如果没有登录,则进行跳转。

所有需要登录验证的controller,继承这个父类即可。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册