Python Social Auth support for Django GraphQL
- Python ≥ 3.4
 - Django ≥ 1.11
 
Install last stable version from Pypi.
pip install django-graphql-social-authSee 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.