Auth0/symfony Management APIs

Hey,

I would like to work with the management part of the sdk.
But i can’t seem to find any docs regarding the symfony sdk.

I looked add the source code but i can’t seem to find any service a can inject in my services.
what is the best approach to do this, are there any examples?

I’m looking to manage the users from within my symfony project.

thx!

Hi @geert.huygen :wave: Thanks for your question. That’s a great point — we should do better at explaining how to use the Management APIs from that SDK.

At present, we don’t expose this API through a Symfony service; nevertheless, it can be used by directly calling the underlying Auth0-PHP SDK instance already instantiated and configured by your Symfony SDK instance.

Here’s an example of accessing Management API endpoints in this manner:

Note: I’m writing this from memory as I’m not at my machine at the moment, so this probably won’t work exactly as-is and may require minor adjustments.

<?php

declare(strict_types=1);

namespace App\Example\Controllers;

use Auth0\SDK\Auth0;
use Auth0\Symfony\Security\Authenticator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

final class ExampleController extends AbstractController
{
    public function __construct(
        private Authenticator $authenticator,
        private RouterInterface $router,
    ) {
    }

    public function updateUserColorMetadata(Request $request): Response
    {
        $user = $this->getUser();
        $endpoint = $this->getManagement()->users();

        $colors = ['red', 'blue', 'green', 'black', 'white', 'yellow', 'purple', 'orange', 'pink', 'brown'];

        // Update the user's metadata with the Management API.
        $endpoint->update(
            id: $user()->getId(),
            body: [
                'user_metadata' => [
                    'color' => $colors[random_int(0, count($colors) - 1)]
                ]
            ]
        );

        $metadata = $endpoint->get($user->getId()); // Retrieve the user's updated metadata.
        $metadata = json_decode($metadata->getBody(), true); // JSON -> PHP array.

        $color = $metadata['user_metadata']['color'] ?? 'unknown';
        $name = $user->getName();

        return new Response("Hello {$name}! Your favorite color is now {$color}.");
    }

    private function getManagement()
    {
        return $this->getSdk()->management();
    }

    private function getSdk(): Auth0
    {
        return $this->authenticator->service->getSdk();
    }
}

Usage reference for the management() class can be found here: auth0-PHP/docs/Management.md at main · auth0/auth0-PHP · GitHub

Hey, first of all, thanks for the reply.

Unfortunately, every service is private and not available for dependency injection.

The Authenticator has no function or prop called service
I believe you meant the Authorizer class.
This class has a getService methode.
However, this service is not accessible. Here’s the output from the Symfony CLI debug:container:

Information for Service "auth0.authorizer"
==========================================

 ---------------- ------------------------------------- 
  Option           Value                                
 ---------------- ------------------------------------- 
  Service ID       auth0.authorizer                     
  Class            Auth0\Symfony\Security\Authorizer    
  Tags             -                                    
  Public           no                                   
  Synthetic        no                                   
  Lazy             no                                   
  Shared           yes                                  
  Abstract         no                                   
  Autowired        no                                   
  Autoconfigured   no                                   
  Usages           security.command.debug_firewall      
                   security.authenticator.manager.main  
                   .service_locator.6OJrPuT             
 ---------------- ------------------------------------- 

 ! [NOTE] The "auth0.authorizer" service or alias has been removed or inlined when the container was compiled.   

I think I’m just going to use the Auth0-PHP SDK package and wrap this with a service of my own.

Hi @geert.huygen

Unfortunately, every service is private and not available for dependency injection.

Hmm, the underlying SDK instance is absolutely intended for accessibility to the host app for cases like this

I believe you meant the Authorizer class.
The Authenticator has no function or prop called service

For Authorizer, there’s a public method to retrieve the service instance from the Authorizor class called getService().

For Authenticator, the service property is public on the Authenticator class.

However, this service is not accessible. Here’s the output from the Symfony CLI debug:container:

It sounds like your service instance may not have been initialized before it was called. In your app’s case, the framework firewall may not have booted up the service before you attempted to call it. You can define a service to always be available through your application’s services.yaml file.

I think I’m just going to use the Auth0-PHP SDK package and wrap this with a service of my own.

That’s a totally valid approach as well! :slight_smile:

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.