Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23

Discussione: Lumen, routes e ruoli

  1. #1

    Lumen, routes e ruoli

    rieccomi qua.

    ho un problema con il contollo dei ruoli nell routes in lumen.
    ho creato un controller che estrae i dati e poi creato una route:
    Codice PHP:
    $router->get('/', function () use ($router) {
        return 
    $router->app->version();
    });

    $router->post('auth/login', ['uses' => 'AuthController@authenticate']);

    $router->group(['prefix' => 'countries''middleware' => ['jwt.auth''role:super-admin']], function () use ($router) {

        
    $router->get('/', ['uses' => 'CountriesController@getAll']);
    }); 
    quando faccio una richiesta senza inviare il token, ottengo il messaggio di errore corretto (token not provided).
    quando invio un token valido, ottengo un 500 server error.
    se levo il pezzo 'role:super-admin', invece ottengo i records del db.
    quindi suppongo che il problema sia quello.

    ho già registrato i middleware in bootstrap/app.php:
    Codice PHP:
    $app->routeMiddleware([
        
    'jwt.auth' => App\Http\Middleware\JwtMiddleware::class,
        
    'auth' => App\Http\Middleware\Authenticate::class,
        
    'permission' => Spatie\Permission\Middlewares\PermissionMiddleware::class,
        
    'role' => Spatie\Permission\Middlewares\RoleMiddleware::class,
        
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
    ]);

    $app->configure('permission');
    $app->register(Spatie\Permission\PermissionServiceProvider::class); 

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Qualcosa non va nel processo di verifica del ruolo, posta il log di lumen.

  3. #3
    allora, l'ultimo logo risale al 9 novembre:
    codice:
    [2018-11-09 13:36:15] lumen.ERROR: Spatie\Permission\Exceptions\GuardDoesNotMatch: The given role or permission should use guard `` instead of `api`. in /var/www/html/justy/vendor/spatie/laravel-permission/src/Exceptions/GuardDoesNotMatch.php:12
    Stack trace:
    #0 /var/www/html/justy/vendor/spatie/laravel-permission/src/Traits/HasPermissions.php(379): Spatie\Permission\Exceptions\GuardDoesNotMatch::create('api', Object(Illuminate\Support\Collection))
    #1 /var/www/html/justy/vendor/spatie/laravel-permission/src/Traits/HasRoles.php(110): App\User->ensureModelSharesGuard(Object(Spatie\Permission\Models\Role))
    #2 /var/www/html/justy/vendor/illuminate/support/Collection.php(339): App\User->Spatie\Permission\Traits\{closure}(Object(Spatie\Permission\Models\Role), 0)
    #3 /var/www/html/justy/vendor/spatie/laravel-permission/src/Traits/HasRoles.php(111): Illuminate\Support\Collection->each(Object(Closure))
    #4 /var/www/html/justy/database/seeds/DatabaseSeeder.php(19): App\User->assignRole(Object(Spatie\Permission\Models\Role))
    #5 [internal function]: DatabaseSeeder->run()
    #6 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(29): call_user_func_array(Array, Array)
    #7 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
    #8 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Laravel\Lumen\Application), Array, Object(Closure))
    #9 /var/www/html/justy/vendor/illuminate/container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application), Array, Array, NULL)
    #10 /var/www/html/justy/vendor/illuminate/database/Seeder.php(122): Illuminate\Container\Container->call(Array)
    #11 /var/www/html/justy/vendor/illuminate/database/Console/Seeds/SeedCommand.php(63): Illuminate\Database\Seeder->__invoke()
    #12 /var/www/html/justy/vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php(122): Illuminate\Database\Console\Seeds\SeedCommand->Illuminate\Database\Console\Seeds\{closure}()
    #13 /var/www/html/justy/vendor/illuminate/database/Console/Seeds/SeedCommand.php(64): Illuminate\Database\Eloquent\Model::unguarded(Object(Closure))
    #14 [internal function]: Illuminate\Database\Console\Seeds\SeedCommand->handle()
    #15 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(29): call_user_func_array(Array, Array)
    #16 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
    #17 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Laravel\Lumen\Application), Array, Object(Closure))
    #18 /var/www/html/justy/vendor/illuminate/container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application), Array, Array, NULL)
    #19 /var/www/html/justy/vendor/illuminate/console/Command.php(183): Illuminate\Container\Container->call(Array)
    #20 /var/www/html/justy/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
    #21 /var/www/html/justy/vendor/illuminate/console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
    #22 /var/www/html/justy/vendor/symfony/console/Application.php(946): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #23 /var/www/html/justy/vendor/symfony/console/Application.php(248): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Database\Console\Seeds\SeedCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #24 /var/www/html/justy/vendor/symfony/console/Application.php(148): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #25 /var/www/html/justy/vendor/illuminate/console/Application.php(88): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #26 /var/www/html/justy/vendor/laravel/lumen-framework/src/Console/Kernel.php(84): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #27 /var/www/html/justy/artisan(35): Laravel\Lumen\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
    #28 {main}
    ho fatto una copia del log, e ricreato vuoto.
    poi ho eseguito un pò di richieste.
    quello nuovo risulta vuoto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Allora controlla il log del server web, questo è del vecchio problema che abbiamo risolto.

  5. #5
    no ok, il file di log non era scrivibile.
    ecco perchè non si vedeva nulla.

    ecco il log dopo una richiesta:
    codice:
    $ tail -f lumen.log
    [2018-11-12 13:00:22] lumen.ERROR: InvalidArgumentException: Auth guard driver [api] is not defined. in /var/www/html/justy/vendor/illuminate/auth/AuthManager.php:97
    Stack trace:
    #0 /var/www/html/justy/vendor/illuminate/auth/AuthManager.php(68): Illuminate\Auth\AuthManager->resolve('api')
    #1 /var/www/html/justy/vendor/illuminate/auth/AuthManager.php(292): Illuminate\Auth\AuthManager->guard()
    #2 /var/www/html/justy/vendor/illuminate/support/Facades/Facade.php(204): Illuminate\Auth\AuthManager->__call('guest', Array)
    #3 /var/www/html/justy/vendor/spatie/laravel-permission/src/Middlewares/RoleMiddleware.php(12): Illuminate\Support\Facades\Facade::__callStatic('guest', Array)
    #4 /var/www/html/justy/vendor/illuminate/pipeline/Pipeline.php(149): Spatie\Permission\Middlewares\RoleMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure), 'super-admin')
    #5 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #6 /var/www/html/justy/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #7 /var/www/html/justy/app/Http/Middleware/JwtMiddleware.php(40): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing\{closure}(Object(Illuminate\Http\Request))
    #8 /var/www/html/justy/vendor/illuminate/pipeline/Pipeline.php(149): App\Http\Middleware\JwtMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
    #9 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
    #10 /var/www/html/justy/vendor/laravel/lumen-framework/src/Routing/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
    #11 /var/www/html/justy/vendor/illuminate/pipeline/Pipeline.php(102): Laravel\Lumen\Routing\Pipeline->Laravel\Lumen\Routing\{closure}(Object(Illuminate\Http\Request))
    #12 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(410): Illuminate\Pipeline\Pipeline->then(Object(Closure))
    #13 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(256): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
    #14 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(160): Laravel\Lumen\Application->handleFoundRoute(Array)
    #15 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(413): Laravel\Lumen\Application->Laravel\Lumen\Concerns\{closure}()
    #16 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(166): Laravel\Lumen\Application->sendThroughPipeline(Array, Object(Closure))
    #17 /var/www/html/justy/vendor/laravel/lumen-framework/src/Concerns/RoutesRequests.php(107): Laravel\Lumen\Application->dispatch(NULL)
    #18 /var/www/html/justy/public/index.php(28): Laravel\Lumen\Application->run()
    #19 {main}
    questo il mio auth.php:
    Codice PHP:
    return [
        
    'defaults' => [
            
    'guard' => env('AUTH_GUARD''api'),
        ],
        
    'guards' => [
            
    'api' => [
                
    'driver' => 'api',
                
    'provider' => 'users'
            
    ],
        ],
        
    'providers' => [
            
    'users' => [
                
    'driver' => 'eloquent',
                
    'model' => App\User::class,
            ],
        ],
        
    'passwords' => [
        ],
    ]; 

  6. #6
    allora, ho letto di decommentare questa riga nel file bootstrap/app.php:
    Codice PHP:
    $app->register(App\Providers\AuthServiceProvider::class); 
    fatto questo, ottengo un altro errore:
    codice:
    [2018-11-12 13:08:28] lumen.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to undefined method App\Providers\AuthServiceProvider::registerPolicies() in /var/www/html/justy/app/Providers/AuthServiceProvider.php:26
    Stack trace:
    #0 [internal function]: App\Providers\AuthServiceProvider->boot()
    #1 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(29): call_user_func_array(Array, Array)
    #2 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
    #3 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Laravel\Lumen\Application), Array, Object(Closure))
    #4 /var/www/html/justy/vendor/illuminate/container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application), Array, Array, NULL)
    #5 /var/www/html/justy/vendor/laravel/lumen-framework/src/Application.php(190): Illuminate\Container\Container->call(Array)
    #6 /var/www/html/justy/bootstrap/app.php(88): Laravel\Lumen\Application->register(Object(App\Providers\AuthServiceProvider))
    #7 /var/www/html/justy/public/index.php(14): require('/var/www/html/j...')
    #8 {main}
    questo il provider:
    Codice PHP:
    namespace App\Providers;

    use 
    App\User;
    use 
    Illuminate\Support\Facades\Gate;
    use 
    Illuminate\Support\ServiceProvider;

    class 
    AuthServiceProvider extends ServiceProvider {

        
    /**
         * Register any application services.
         *
         * @return void
         */
        
    public function register() {
            
    //
        
    }

        
    /**
         * Boot the authentication services for the application.
         *
         * @return void
         */
        
    public function boot() {
            
    $this->registerPolicies();

            
    Gate::before(function ($user$ability) {
                return 
    $user->hasRole('super-admin');
            });

            
    $this->app['auth']->viaRequest('api', function ($request) {
                if (
    $request->input('api_token')) {
                    return 
    User::where('api_token'$request->input('api_token'))->first();
                }
            });
        }



  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Non riesco a leggere il log, ne vedo solo un pezzo e non posso scrollare orizzontalmente.

    Stai usando tymondesigns/jwt-auth per l'autenticazione?

  8. #8
    no sto usando firebase/php-jwt.
    ho seguito questa guida: https://medium.com/tech-tajawal/jwt-...6-2376fd38d454

    me la sto rileggendo per vedere se mi manca qualcosa, ma non mi sembra.

    ti riposto l'ultimo log cercando di andare a capo (in effetti non fa scrollare in orizzontale):
    codice:
    8-11-12 13:11:29] lumen.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: 
    Call to undefined method App\Providers\AuthServiceProvider::registerPolicies()
     in /var/www/html/justy/app/Providers/AuthServiceProvider.php:26
    Stack trace:
    #0 [internal function]: App\Providers\AuthServiceProvider->boot()
    #1 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(29): 
    call_user_func_array(Array, Array)
    #2 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(87): 
    Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
    #3 /var/www/html/justy/vendor/illuminate/container/BoundMethod.php(31):
     Illuminate\Container\BoundMethod::callBoundMethod
    (Object(Laravel\Lumen\Application), Array, Object(Closure))
    #4 /var/www/html/justy/vendor/illuminate/container/Container.php(549):
     Illuminate\Container\BoundMethod::call(Object(Laravel\Lumen\Application),
     Array, Array, NULL)
    #5 /var/www/html/justy/vendor/laravel/lumen-framework/src/Application.php(190):
     Illuminate\Container\Container->call(Array)
    #6 /var/www/html/justy/bootstrap/app.php(88): 
    Laravel\Lumen\Application->register(Object(App\Providers\AuthServiceProvider))
    #7 /var/www/html/justy/public/index.php(14): require('/var/www/html/j...')
    #8 {main}

  9. #9
    ho levato questa riga dal mio AuthServiceProvider e ho eliminato l'errore:
    Codice PHP:
    $this->registerPolicies(); 
    da dove l'ho presa non saprei proprio.....

    adesso, una volta eseguito il login e preso un token, questo funziona:
    Codice PHP:
    $router->group(['prefix' => 'countries''middleware' => ['jwt.auth']], function () use ($router) {

        
    $router->get('/', ['uses' => 'CountriesController@getAll']);
    }); 
    questo invece mi da sempre UnauthorizedException - User is not logged in, anche se l'utente ha il ruol di super-admin:
    Codice PHP:
    $router->group(['prefix' => 'countries''middleware' => ['jwt.auth''role:super-admin']], function () use ($router) {

        
    $router->get('/', ['uses' => 'CountriesController@getAll']);
    }); 
    come se non leggesse bene i ruoli / permessi.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Così ad intuito direi che c'è qualcosa che non va in AuthServiceProvider

    Il codice lo hai scritto tu o lo hai preso da qualche parte? Puoi postarlo? (Magari su pastebin così si legge meglio)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.