oauth2-client
oauth2-client copied to clipboard
Create ResourceOwnerEmailInterface
Hi I was trying to get the identify of third party, but I can see the most of the others dependencies like oauth2-client, linkedin and so on, use the getId()
with the id
provider by the api, it's kind make sense :), But I would like to getEmail
too
then my suggestion is create a new Interface like
interface ResourceOwnerEmailInterface extends ResourceOwnerInterface
{
public function getEmail(): string;
}
and for the api that has email implements email, uses ResourceOwnerEmailInterface
instead of ResourceOwnerInterface
the second option is
interface ResourceOwnerEmailInterface
{
public function getEmail(): string;
}
and the Owner class implements both interface ResourceOwnerEmailInterface
and ResourceOwnerInterface
, But I'm not sure about this, it can be useful or not! but the positive thing about this is, we can create others interface like
Email
, firstName
, Lastname
and image
, the for the api that has those information just need to add those interfaces.
it will be like this
class ApiBlaBlaOwner implements ResourceOwnerEmailInterface, ResourceOwnerNameInterface, ResourceOwnerImageInterface, ResourceOwnerInterface
Because those fields are quite useful for most of applications
I'm curious. A third party client can extend by itself with any interfaces the ResourceOwnerInterface. Why would you wish to add it to the base?
For now the main reason is: I'm creating a lib to make this oauth2-client
works easily for symfony!
then I wan't to add the option to create a user when it doesn't exist, But for this I need to get the return with a object with
identifier
(email? maybe), First name, last name, and in case there is image
add too!
But the providers need to return this common interface.
To be honest, I don't know Symfony. Maybe I missed something. But from what I understand about your needs, you can extend AbstractProvider
in your library to make your provider.
Then, you can create the owner object as you want and you just need to provide it in return of abstract protected function createResourceOwner(array $response, AccessToken $token);
(createResourceOwner
body is defined in your provider).
Your RessourceOwner
can implement the ResourceOwnerInterface
and/or any other interface without problem, because this part isn't handle directly by the oauth2-client.
Also, the public function getId();
returns a mixed
value, it can be whatever you want (string
, array
, object
, ...).
For example, it's what I done in my third party lib for an REST API. Provider: https://github.com/Austomos/oauth2-chaster-app/blob/8d6d1374098961d70e8a9e4fd211843cfde65e72/src/Provider/ChasterApp.php#L92 RessourceOwner: https://github.com/Austomos/oauth2-chaster-app/blob/8d6d1374098961d70e8a9e4fd211843cfde65e72/src/Provider/ChasterAppResourceOwner.php
Ok, But you are thinking as I'm going to create a new provider, But not it'll be an abstraction of this library,But I can pass many providers, for example:
-
let's say that I'll implement:
Create user a user in case it doesn't exist!
- then you going to authenticate with : google, linkedin, facebook and so on
- and the
createResourceOwner method
need to return a common interface between them for I make sure that the response will return the basic data to create an account like :email
,first name
,last name
, andimage
(it can be optional).
then my idea for this process works is add the interfaces here and the providers can add in their code, this way I'll have a common interface(s) between all providers that I use (of course In case they implement the interface)
Note 1: In my case I'm doing an abstraction for symfony, but Other guy can do the samething for other framework like laravel Note 2: my goal in the end is pass the provides into the configuration and it works for all providers passed like
//some_config_file.yaml config_lib_auth: providers - Provider1 - Provider2 - Provider3 - .......
I completely understand that you wish keep an abstracted provider and provide more owner ressource interfaces, but you can still do it by extending the AbstractProvider
of oauth2-client by your own AbstractProvider
and adding more interfaces fir owner ressource. Anyway, I'm not a maintainer, you can still make a PR. I just think you could do your lib without waiting new release of oauth2-client. ;-)
any feedback here? 👀
well I can provide a PR for this, I just want to be sure, that it's agreed!