2017-08-28 44 views
1

我有RestAPI应用程序,我想调用我的网址后检查令牌。如何在所有symfony控制器上运行代码?

我的网址是这样的:127.0.0.1:8000/{api_token}/GetUsers

,犹如md5('test'.time())

我现在控制器产生我api_token是:

/** 
* @Route("/{api_token}") 
*/ 
class UserController extends FOSRestController 
{ 
    /** 
    * @Rest\Get("/GetUsers") 
    */ 
    public function getAction($api_token, Request $request) 
    { 
    if($api_token != $this->container->get('api_token')->getApiToken()) 
      return ['error'=> ['code' => 403, 'message' => 'Authentication failed']]; 

     //.... 
    } 

    /** 
    * @Rest\Post("/RegisterUser") 
    */ 
    public function registerAction($api_token, Request $request) 
    { 
    if($api_token != $this->container->get('api_token')->getApiToken()) 
      return ['error'=> ['code' => 403, 'message' => 'Authentication failed']]; 

     //.... 
    } 
} 

这部分代码在第一次我所有的行动中运行:

if($api_token != $this->container->get('api_token')->getApiToken()) 
       return ['error'=> ['code' => 403, 'message' => 'Authentication failed']]; 

什么是标准d和更好的方式来做到这一点?

回答

3

您应该使用kernel.request事件在这里

Symfony events, Kernel-requets

每次Symfony的接收到一个请求触发这个事件,所以你可以把你的代码的事件监听器,它会被触发 更多信息对每个请求。