CakePHP的服务
身份验证
身份验证是识别有效用户的过程。 CakePHP支持三种类型的身份验证。
FormAuthenticate -它允许您根据表单POST数据来验证用户身份。通常是用来输入用户信息的登录表单。这是默认的身份验证方法。
BasicAuthenticate -它可以让你使用HTTP基本认证来验证用户。
DigestAuthenticate -它可以让你使用HTTP摘要认证来验证用户。
FormAuthentication例子
修改config/routes.php文件如下。
config/routes.php文件
<?php use CakeCorePlugin; use CakeRoutingRouteBuilder; use CakeRoutingRouter; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/auth',['controller'=>'Authexs','action'=>'index']); $routes->connect('/login',['controller'=>'Authexs','action'=>'login']); $routes->connect('/logout',['controller'=>'Authexs','action'=>'logout']); $routes->fallbacks('DashedRoute'); }); Plugin::routes();
修改AppController.php文件的代码如下。
src/Controller/AppController.php
<?php namespace AppController; use CakeControllerController; use CakeEventEvent; use CakeControllerComponentAuthComponent; class AppController extends Controller{ public function initialize(){ parent::initialize(); $this->loadComponent('RequestHandler'); $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => ['username' => 'username', 'password' => 'password'] ] ], 'loginAction' => ['controller' => 'Authexs', 'action' => 'login'], 'loginRedirect' => ['controller' => 'Authexs', 'action' => 'index'], 'logoutRedirect' => ['controller' => 'Authexs', 'action' => 'login'] ]); $this->Auth->config('authenticate', [ AuthComponent::ALL => ['userModel' => 'users'], 'Form']); } public function beforeRender(Event $event){ if (!array_key_exists('_serialize', $this=>viewVars) && in_array($this->response=>type(), ['application/json', 'application/xml'])) { $this->set('_serialize', true); } } }
在src/Controller/目录下创建AuthexsController.php文件。复制以下代码至其中。
src/Controller/AuthexsController.php
<?php namespace AppController; use AppControllerAppController; use CakeORMTableRegistry; use CakeDatasourceConnectionManager; use CakeEventEvent; use CakeAuthDefaultPasswordHasher; class AuthexsController extends AppController{ var $components = array('Auth'); public function index(){ } public function login(){ if($this->request->is('post')){ $user = $this->Auth->identify(); if($user){ $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } else $this->Flash->error('Your username or password is incorrect.'); } } public function logout(){ return $this->redirect($this->Auth->logout()); } } ?>
在src/Template目录下创建一个Authexs目录,并在此Authexs目录下创建一个名为login.ctp一个视图文件。复制以下代码至其中。
src/Template/Authexs/ login.ctp
<?php echo $this->Form->create(); echo $this->Form->input('username'); echo $this->Form->input('password'); echo $this->Form->button('Submit'); echo $this->Form->end(); ?>
创建另一个名为logout.ctp的视图文件。复制以下代码至其中。
src/Template/Authexs/logout.ctp
You are successfully loggedout.
创建另一个名为index.ctp的视图文件。复制以下代码至其中。
src/Template/Authexs/index.ctp
You are successfully logged in. <?php echo $this->Html->link('logout',["controller" => "Authexs","action" => "logout"]); ?>
通过访问以下网址执行上面的例子。
http://localhost:85/CakePHP/auth
输出
由于认证已经启用,所以一旦你尝试访问上述网址,如下图所示,你将被重定向到登录页面。
提供正确的凭据后,您将登录并重定向到如下页面上。
点击注销链接后,你将再次被重定向到登录界面。
更多建议: