Я использую Firebase JWT в моем Lumen проекте, и я не уверен в возвращении пользовательского ответа json, когда токен недействителен.Я использую по умолчанию Authenticate.php промежуточное ПО.
Я не знаю, следует ли мне использовать промежуточное ПО или подобные исключения throw new Exception('token not provided');
?
Является AuthServiceProvider.php (ниже мой текущий код) хорошее место для декодирования токена?
<?php
namespace App\Providers;
use App\User;
use Illuminate\Support\ServiceProvider;
use Firebase\JWT\JWT;
use Firebase\JWT\ExpiredException;
use Exception;
class AuthServiceProvider extends ServiceProvider
{
/**
* Boot the authentication services for the application.
*
* @return void
*/
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) {
$token = $request->bearerToken();
if(!$token) {
// Unauthorized response if token not there
throw new Exception('token not provided');
}
try {
$credentials = JWT::decode($token, env('JWT_SECRET'), ['HS256']);
} catch(ExpiredException $e) {
return response()->json([
'error' => 'token expired'
], 400);
} catch(Exception $e) {
return response()->json([
'error' => 'token error'
], 400);
}
return User::find($credentials->sub);
});
}
}