Hi there,
I’m building an application divided in two parts
- a rest-api which communicates with an iOS app
- a dashboard with some administration tasks
My rest-api controllers are stored in a separated namespace controllers/api.
I’ve added an authentication behaviour to my ProjectController
:
/**
* Add specific behavior to the controller.
*
* @return array
*/
public function behaviors() {
$behaviors = parent::behaviors();
/* Attach authenticator for access-token login */
$behaviors['authenticator'] = [
'class' => QueryParamAuth::class,
];
return $behaviors;
}
Furthermore, there’s an action where I can request a product:
/**
* This method checks a given project number and
* returns additional information serialized in a json object.
*
* @throws \yii\base\ExitException
*/
public function actionRequest() {
$params = Yii::$app->request;
$projectId = (int)$params->get('project-id');
/*
* If no project could be found for the given project id return
* an error message in the jsend-styled json-response.
*/
if(!$projectId || $projectId !== 2) {
$this->renderJSON(null, 'fail', 'no products could be found.');
}
/* project could be found, return success */
$this->renderJSON(['project-id' => $projectId, 'title' => 'Testprojekt']);
}
That works perfectly but now I also would like to return json-responses if the login-process fails. When login failed, QueryParamAuth
's authenticate
method will be called and the exception UnauthorizedHttpException
will be thrown in AuthMethod
.
I would like to differentiate the response (json or ‘just’ normal) if the request calls an controller in api namespace (or not). I’ve looked for something like middlewars, but I couldn’t find anything. How can I implement my idea?
Thank you.