我正在使用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
}
}
答案 0 :(得分:3)
您应该查看the regex。
基本上有两种选择如何添加中间件:
每middleware concept from slim3
$app->add(function ($request, $response, $next) {
$response->getBody()->write('BEFORE');
$response = $next($request, $response);
$response->getBody()->write('AFTER');
return $response;
});
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);
您拥有invokable class,可以从网址获取utoken
。