CakePHP 3.6:以登录表单的形式保护内部页面

时间:2018-11-26 07:37:40

标签: php cakephp login oauth authorization

我已使用this tutorial为我的应用程序创建登录屏幕。但是我想用相同的登录表单保护另一个内页。因此,用户可以登录并使用该应用程序,但是如果他/她希望在应用程序中打开特定页面,则出于安全原因,他/她必须重新输入密码。我该如何实现?

这是我在AppController.php中的初始化函数:

$this->loadComponent('Auth', [
                'authenticate' => [
                    'Form' => [
                        'fields' => [
                            'username' => 'email',
                            'password' => 'password'
                        ]
                    ]
                ],
                'loginAction' => [
                    'controller' => 'Users',
                    'action' => 'login'
                ]
            ]);

1 个答案:

答案 0 :(得分:0)

即使在已经过身份验证的环境中,您也可以始终使用AuthComponent::identify()方法来检查登录表单。请参阅CakePHP文档中的Identifying Users and Logging Them In和API文档中的AuthComponent::identify

分步操作:

  1. 创建用于重新检查密码的控制器操作和模板,并包含User实体的表单,其中包含用于emailpassword的控件。
  2. 如果愿意,可以预填充email字段,也可以使用隐藏字段。
  3. 添加一个$this->request->is('post')块,就像您使用标准登录并使用$user = $this->Auth->identify();检查有效凭据的方式一样。
  4. 如果返回有效用户,请在Session中存储一些标志或时间戳以用于超时,然后重定向到受保护的页面。
  5. 在任何受保护的控制器上,检查Controller::beforeFilter回调方法中是否存在标志或有效时间戳记,如果没有,则抛出UnauthorizedExceptionForbiddenException