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框架,控制器的默认action为actionIndex,但是在这个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的位置,它并没有被放在backend的model目录下,而是被放在了与backend平级的common目录下,是因为有可能前端应用也需要登录,很多时候,在一个系统中,登录的逻辑都是一样的。

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

public $loginUrl = ['site/login']

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

本文转自 tywali 51CTO博客,原文链接:http://blog.51cto.com/lancelot/1871253,如需转载请自行联系原作者

Yii 2 —— Backend自动出现登录页相关推荐

  1. 页面监听,一段时间内不操作网页,就自动跳转到登录页

    需求:用户在 5 分钟内没有操作网页,就自动跳转到登录页. 环境:jquery 项目,有公共的 js 文件 . 在所有页面都引用的 js 文件中添加下面代码: //判断用户是否在5分钟内未操作页面,如 ...

  2. vue 上次登录时间_Vue设置长时间未操作登录自动到期返回登录页

    Vue设置长时间未操作登录以后自动到期返回登录页 首先我们写在main.js文件中 import routerUtil from "@/utils/routerutil";//先将 ...

  3. 360浏览器,qq浏览器等登录页输入账号密码,在页面内再次遇见有密码框的地方会自动填充的解决办法。

    在360浏览器,qq浏览器等登录页输入账号密码,在页面内再次遇见有密码框的地方会自动填充,在网上没有找到合适的解决办法,然后自己琢磨了一个,仅供参考. 登录页的账号密码输入框不需要做任何变化. 我们可 ...

  4. vue-router判断页面未登录时,自动跳转到登录页

    1.定义路由的时候配置meta属性,requireAuth用来标记跳转的这个路由是否需要检测登录 下面的两个页面,登录页不需要检测,首页需要检测 const routers = [ {path: '/ ...

  5. 【教程】EasyDSS演示模式播放ws-flv格式视频流,如何控制3分钟自动跳转登录页?

    之前我们讲过EasyDSS视频智能直播点播平台在演示模式下登录5分钟后强制跳转登录页的实现过程,大家也可以去了解一下.EasyDSS视频平台界面可以播放ws-flv.flv.hls三种格式的视频流. ...

  6. android 炫酷背景,炫酷-背景图垂直循环滚动登录页,Android RecyclerView实现

    炫酷-背景图上下循环滚动登录页,Android RecyclerView实现方法 某站的登录页背景不停循环滚动,和街边的广告箱很像,感觉不错我也心动了.决定高仿一下,参考了几篇文章后就动手了. 实现步 ...

  7. springsecurity不拦截某个接口_SpringSecurity 默认表单登录页展示流程源码

    SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程,涉及1.FilterSecurityIntercepto ...

  8. vue登录如何存储cookie_vue项目实现表单登录页保存账号和密码到cookie功能

    实现功能: 1.一周内自动登录勾选时,将账号和密码保存到cookie,下次登陆自动显示到表单内 2.点击忘记密码则清空之前保存到cookie的值,下次登陆需要手动输入 次要的就不说了直接上主要的代码 ...

  9. 登录页跳转时保存用户信息-遇坑记

    项目中遇到的问题,重新建前端界面,遇到了这个问题. 项目中使用Angular JS + admin LTE + bootstrap3 保存用户信息,我有两种思路,一个是使用Angular JS-ser ...

最新文章

  1. Introduction to pinatrace annotate version 2: a look into latches again
  2. python json数据的转换
  3. python hook教程_python中使用pyhook实现键盘监控的例子
  4. 拥抱.NET Core系列:Logging (1)
  5. 【论文阅读】Deep Neural Networks for Learning Graph Representations | day14,15
  6. RESTful API标准设计教程
  7. Python代码格式化规范
  8. AB-PLC下载程序与上载程序详解
  9. Python代码加密方案总结(巨全面和详细)
  10. 图像与视频的Alpha通道
  11. python的两种执行方式,python的两种运行方式
  12. 机器学习sklearn-逻辑回归
  13. 微软网盘SkyDrive简单一步获取mp3外链的方法
  14. 【阅读提要】《电子设备热设计及分析技术》_余建祖_1
  15. 网红电商剧烈洗牌,机会将属于拥有“头部网红矩阵”的MCN机构?
  16. word2003文档转pdf预览加盖水印与套红
  17. 苹果xr配置_iPhone11和XR到底谁性价比高?一文看懂
  18. 单片机中的几种通信方式
  19. 故事工厂在DuerOS技能开发中的应用——百度2019AI开发者大会DuerOS公开课摘要解读之四...
  20. cmd命令行远程连接 CentOS 服务器

热门文章

  1. easyui 控制某列显示不显示_baogaiMCU控制OLED显示屏
  2. 0分配不到地址_图解 Go 内存分配器
  3. android实现水平进度条_Flutter在线视频播放功能实现(chewie库)
  4. linux 目录权限及归属,Linux中如何设置目录或文件的归属及权限
  5. dgi数据治理_国外数据治理模型比较
  6. linux下怎么识别fioa卡,2020年新版电子警察信号灯设计、施工方案.docx
  7. 修改ubuntu默认的Python版本号
  8. Java案例:两个线程交替执行
  9. 【OJ1768】最大子矩阵
  10. php 获取图片的宽高,JS怎么获取图片当前宽高