使用Slim 3在app运行之前验证usertoken

时间:2016-10-28 08:48:36

标签: php rest authentication token slim

我正在使用Slim Framework 3制作一个小型内部API来获取Facebook数据。大约有30个特定用户可以访问API。

我想通过网站发送的用户令牌对用户进行身份验证,并在应用运行之前检查该令牌。

用户上的令牌设置在数据库中,当用户请求API时,令牌通过GET发送,如果数据库和GET令牌匹配,则应授予用户访问权限的权限。 API,否则应禁止用户访问。

我用它来获取facebook数据:

$app->get('/fbdata/campaign/{campaign}/bankarea/{bankarea}/from/{from}/to/{to}/utoken/{utoken}', function(Request $request, Response $response) {

    $bd = new BankAppData();
    $getFb = new GetFacebookData();

    $bankarea = $request->getAttribute('bankarea');
    $campaign = $request->getAttribute('campaign');

    $appid = $bd->BankData($bankarea)->appid;
    $appsecret = $bd->BankData($bankarea)->appsecret;
    $fbtoken = $bd->BankData($bankarea)->fbtoken;

    $dateFrom = $request->getAttribute('from');
    $dateTo = $request->getAttribute('to');

    $getFb->FetchData($appid, $appsecret, $fbtoken, $campaign, $bankarea, "act_XXXX", $dateFrom, $dateTo);


});

这很好用,但我希望在上面运行之前使用AuthenticationHandler类检查utoken

我使用$app->add(new SNDB\AuthenticationHandler());添加它,但我不确定如何从AuthenticationHandler类中的URL中获取声音。

基本上我想做像

这样的事情
function Authenticate() {

   if($dbToken != $utoken) {
      //No access - app will just stop doing anything else
   } else {
     //You have access - just continue what you was trying to do
   }

}

1 个答案:

答案 0 :(得分:3)

您应该查看the regex

基本上有两种选择如何添加中间件:

  1. middleware concept from slim3

    $app->add(function ($request, $response, $next) {
        $response->getBody()->write('BEFORE');
        $response = $next($request, $response);
        $response->getBody()->write('AFTER');
    
        return $response;
    });
    
  2. anonymous function

    class ExampleMiddleware
    {
        public function __invoke($request, $response, $next)
        {
            $response->getBody()->write('BEFORE');
            $response = $next($request, $response);
            $response->getBody()->write('AFTER');
    
            return $response;
        }
    }
    $app->add(new ExampleMiddleware);
    
  3. 您拥有invokable class,可以从网址获取utoken