Как вернуть ответ JSON в AuthServiceProvider? - PullRequest
0 голосов
/ 23 ноября 2018

Я использую 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);
        });
    }
}
...