Python Social Auth support for Django GraphQL
- Python ≥ 3.4
- Django ≥ 1.11
Install last stable version from Pypi.
pip install django-graphql-social-auth
See the documentation for further guidance on setting Python Social Auth.
Add the SocialAuth
mutation to your GraphQL schema.
import graphene
import graphql_social_auth
class Mutations(graphene.ObjectType):
social_auth = graphql_social_auth.SocialAuth.Field()
Session authentication via accessToken.
provider
: provider name from Authentication backend list.accessToken
: third-party (Google, Facebook...) OAuth token obtained with any OAuth client.
mutation SocialAuth($provider: String!, $accessToken: String!) {
socialAuth(provider: $provider, accessToken: $accessToken) {
social {
uid
extraData
}
}
}
Authentication solution based on JSON Web Token.
Install additional requirements.
pip install 'django-graphql-social-auth[jwt]'
Add the SocialAuthJWT
mutation to your GraphQL schema.
import graphene
import graphql_social_auth
class Mutations(graphene.ObjectType):
social_auth = graphql_social_auth.SocialAuthJWT.Field()
Authenticate via accessToken to obtain a JSON Web Token.
mutation SocialAuth($provider: String!, $accessToken: String!) {
socialAuth(provider: $provider, accessToken: $accessToken) {
social {
uid
}
token
}
}
Complete support for Relay.
import graphene
import graphql_social_auth
class Mutations(graphene.ObjectType):
social_auth = graphql_social_auth.relay.SocialAuth.Field()
graphql_social_auth.relay.SocialAuthJWT.Field()
for JSON Web Token (JWT) authentication.
Relay mutations only accepts one argument named input:
mutation SocialAuth($provider: String!, $accessToken: String!) {
socialAuth(input:{provider: $provider, accessToken: $accessToken}) {
social {
uid
}
}
}
If you want to customize the SocialAuth
behavior, you'll need to customize the resolve()
method on a subclass of SocialAuthMutation
or .relay.SocialAuthMutation.
import graphene
import graphql_social_auth
class SocialAuth(graphql_social_auth.SocialAuthMutation):
user = graphene.Field(UserType)
@classmethod
def resolve(cls, root, info, social, **kwargs):
return cls(user=social.user)
Authenticate via accessToken to obtain the user id.
mutation SocialAuth($provider: String!, $accessToken: String!) {
socialAuth(provider: $provider, accessToken: $accessToken) {
social {
uid
}
user {
id
}
}
}
There is a Django project template to start a demo project.
Gracias @omab / Python Social Auth.