身份驗(yàn)證是識(shí)別有效用戶的過(guò)程。 CakePHP支持三種類(lèi)型的身份驗(yàn)證。
FormAuthenticate -它允許您根據(jù)表單POST數(shù)據(jù)來(lái)驗(yàn)證用戶身份。通常是用來(lái)輸入用戶信息的登錄表單。這是默認(rèn)的身份驗(yàn)證方法。
BasicAuthenticate -它可以讓你使用HTTP基本認(rèn)證來(lái)驗(yàn)證用戶。
DigestAuthenticate -它可以讓你使用HTTP摘要認(rèn)證來(lái)驗(yàn)證用戶。
修改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/目錄下創(chuàng)建AuthexsController.php文件。復(fù)制以下代碼至其中。
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目錄下創(chuàng)建一個(gè)Authexs目錄,并在此Authexs目錄下創(chuàng)建一個(gè)名為login.ctp一個(gè)視圖文件。復(fù)制以下代碼至其中。
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(); ?>
創(chuàng)建另一個(gè)名為logout.ctp的視圖文件。復(fù)制以下代碼至其中。
src/Template/Authexs/logout.ctp
You are successfully loggedout.
創(chuàng)建另一個(gè)名為index.ctp的視圖文件。復(fù)制以下代碼至其中。
src/Template/Authexs/index.ctp
You are successfully logged in. <?php echo $this->Html->link('logout',["controller" => "Authexs","action" => "logout"]); ?>
通過(guò)訪問(wèn)以下網(wǎng)址執(zhí)行上面的例子。
http://localhost:85/CakePHP/auth
由于認(rèn)證已經(jīng)啟用,所以一旦你嘗試訪問(wèn)上述網(wǎng)址,如下圖所示,你將被重定向到登錄頁(yè)面。
提供正確的憑據(jù)后,您將登錄并重定向到如下頁(yè)面上。
點(diǎn)擊注銷(xiāo)鏈接后,你將再次被重定向到登錄界面。
更多建議: