Yii 2 —— Backend自动出现登录页

简介:

1.1  Backend自动出现登录页

http://backend/访问后端时,页面会自动被重定向到http://backend/index.php?r=site%2Flogin,要求进行登录,这其中的流程是怎样的?

 

按照YII的理念,框架在处理http://backend/这种链接时,首先要找到默认的controller,然后再找默认的action

1.1.1  获取默认controller

backend应用的最初入口文件:index.php中,有如下代码:

(new yii\web\Application($config))->run();

 

可以知道,application的入口文件是:

%yii-application%\vendor\yiisoft\yii2\web\Application.php

 

打开该文件,找到$defaultRoute的定义:

public $defaultRoute 'site';

 

因此,可以确定默认的controller就是siteController

1.1.2  获取默认action

对于YII框架,控制器的默认actionactionIndex,但是在这个action被执行之前,会根据controller所配置的过滤器,先执行过滤器的代码,如果过滤器的执行结果导致action不被执行,则也没有获取默认action的必要了。所以首先要看siteController的过滤器是怎样配置的。

1.1.3  SiteController的过滤器

根据YII2框架,controller中的过滤器实际上是一些behavior,被配置为在action之前或之后执行,用来做一些必要的检查和设置等工作。对于backend应用来说,一般都需要登录,所以有必要在action被执行之前,检查一下用户是否登录,这时,就用得上过滤器了。

 

siteController的过滤器配置如下:

public function behaviors()
 {
     
return [
         
'access' => [
             
'class' => AccessControl::className(),
             
'rules' => [
                 [
                     
'actions' => ['login''error'],
                     
'allow' => true,
                 
],
                 
[
                     
'actions' => ['logout''index'],
                     
'allow' => true,
                     
'roles' => ['@'],
                 
],
             
],
         
],
         
'verbs' => [
             
'class' => VerbFilter::className(),
             
'actions' => [
                 
'logout' => ['post'],
             
],
         
],
     
];
 
}

 

在上述代码中看到配置的第一个过滤器是access,这个过滤器是YII2内置的过滤器,用来实现访问控制,这里配置了两条rule,其中第二条rule控制了index这个action,其中roles => [‘@’],表示只有登录用户才能执行actionIndex,而当前用户还没有登录,所以是不能执行indexAction的,于是请求被转到user这个model来处理。

 

为什么要把请求转到user这个model来处理?因为在不同的系统中,对于登录的逻辑处理是不一样的,框架中需要将这些逻辑交给用户来自己处理,而YII框架中,业务逻辑是放在model中的,所以最后由user这个model来处理。

 

为什么model名称是user?看AccessControl类的定义:

public $user 'user';

在这里定义了model的名称,在init()函数中将model实例化。

 

关于user这个model的位置,它并没有被放在backendmodel目录下,而是被放在了与backend平级的common目录下,是因为有可能前端应用也需要登录,很多时候,在一个系统中,登录的逻辑都是一样的。

 

最终,在user这个modelloginRequired函数中,执行了一个重定向,将链接重定向到$loginUrl所指向的地址,而这个变量的值,就是:

public $loginUrl = ['site/login']

 

所以,页面就跳转到登录页面了。






本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/1871253,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
应用服务中间件 nginx
【报错】在nginx下启动,登录成功后页面不跳转
【报错】在nginx下启动,登录成功后页面不跳转
259 4
|
3月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
3月前
|
安全 Java 应用服务中间件
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
|
4月前
|
JavaScript
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
若依修改---白名单怎样添加,怎样在初始化页面初始为自己的页面
|
5月前
|
安全
tp5使用ueditor请求后台配置项http错误,上传功能将不能正常使用!
tp5使用ueditor请求后台配置项http错误,上传功能将不能正常使用!
361 0
Pure admin-Router标签页配置以及页面持久化
Pure admin-Router标签页配置以及页面持久化
259 0
|
缓存 JavaScript 前端开发
Vite Server 是如何处理页面资源的?
Vite Server 是如何处理页面资源的?
164 0
|
缓存 安全 PHP
SAP Gateway 后台模型的缓存设置(2)
SAP Gateway 后台模型的缓存设置
|
缓存
SAP Gateway 后台模型的缓存设置(1)
SAP Gateway 后台模型的缓存设置
|
存储 缓存 前端开发
Web Server 设置缓存响应字段的一些推荐方案
Web Server 设置缓存响应字段的一些推荐方案
133 0
Web Server 设置缓存响应字段的一些推荐方案