Я пытаюсь получить настройку функции auth
. Все мои API
вызовы должны иметь два обязательных заголовка, которые api-token,domain
, без этого API
не должен работать.
То, что я пытаюсь сделать, это то, что я проверяю две вещи, если их там нет, в ответе должно быть четко указано, какой из них отсутствует или предоставлен неправильно.
Например, если api-токен отсутствует или неправильный, в сообщении об ошибке указывается состояние «Неверный / неверный API».
Вот мой код.
*AuthServiceProvider.php*
public function boot()
{
// Here you may define how you wish users to be authenticated for your Lumen
// application. The callback which receives the incoming request instance
// should return either a User instance or null. You're free to obtain
// the User instance via an API token or any other method necessary.
$this->app['auth']->viaRequest('api', function ($request) {
//check domain
$domainDetails = $this->checkDomain($request->header('domain'));
// if domain check passed
if($domainDetails[0]){
// check api details
$apiCheck = $this->checkAPI($domainDetails[1],$request->header('api_token'));
// if the api check passed
if($apiCheck[0]){
}
// if not passed then throw api error
else{
return $apiCheck[1];
}
}
// throw domain error
else{
return $domainDetails[1];
}
if ($this->checkDomain($request->header('domain')) == 6) {
return User::where('api_token', $request->input('api_token'))->first();
}
});
}
Authenticate.php
/*
* check api key exists and get the user details
* @params
* 1. Domain ID
* 2. API key
*/
public function checkAPI($_domainNameID, $_apiKey){
if($_domainNameID == null){
return [false,'Domain Required'];
}
if($_apiKey == null){
return [false,'API Key required'];
}
if($_domainNameID !== null && $_apiKey !== null){
$userDetails = User::where('client_id','=',$_domainNameID)
->where('api_token','=',$_apiKey)
->selectRaw('id as `user_id`,'.
'email as `username`,'.
'qa_designation as `User Designation`,'.
'access_type as `User Access`')
->first();
if($userDetails != null){
return [true,$userDetails];
}else{
return [false,'API Key doesn"t exists'];
}
}
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ($this->auth->guard($guard)->guest()) {
**here how can I display a custom message**
return response('Unauthorized.', 401);
}
return $next($request);
}
web.php
$router->group(['prefix' => 'v1'], function () use ($router) {
$router->get('/auth',['middleware' => 'auth', function () use ($router) {
return $router->app->version();
}]);
});