CakePHP的服務(wù)

2018-01-14 22:42 更新

身份驗(yàn)證

身份驗(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)證用戶。

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/目錄下創(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)鏈接后,你將再次被重定向到登錄界面。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)