Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mutation register errors "Please, enter valid credentials" #126

Open
4 of 7 tasks
louistwiice opened this issue Sep 28, 2021 · 8 comments
Open
4 of 7 tasks

Mutation register errors "Please, enter valid credentials" #126

louistwiice opened this issue Sep 28, 2021 · 8 comments

Comments

@louistwiice
Copy link

louistwiice commented Sep 28, 2021

Prerequisites

  • Is it a bug?
  • Is it a new feature?
  • Is it a a question?
  • Can you reproduce the problem?
  • Are you running the latest version?
  • Did you check for similar issues?
  • Did you perform a cursory search?

For more information, see the CONTRIBUTING guide.

Description

Hi,

I am using django-graphql-auth. I have followed quickstart guide on https://django-graphql-auth.readthedocs.io/en/latest/quickstart/. I have only imlemented the registration of a user. But it seems like I can't create one. I receive a message "Please, enter valid credentials"

Steps to Reproduce

If we need to reproduce and you don't provide steps for it, it will be closed. Alternatively, you can link a repo with the code to run your issue.

settings.py file

`
INSTALLED_APPS = [

'graphene_django',
'graphql_auth',
'graphql_jwt.refresh_token.apps.RefreshTokenConfig',
'django_filters',

'core',
'user_management',

]
AUTH_USER_MODEL = "core.Users"
GRAPHENE = {
"SCHEMA": "config.schema.schema",
'MIDDLEWARE': [
'graphql_jwt.middleware.JSONWebTokenMiddleware',
],
}
AUTHENTICATION_BACKENDS = [
"graphql_jwt.backends.JSONWebTokenBackend",
"graphql_auth.backends.GraphQLAuthBackend",
]
GRAPHQL_JWT = {
"JWT_VERIFY_EXPIRATION": True,
'JWT_LONG_RUNNING_REFRESH_TOKEN': True,
"JWT_ALLOW_ANY_CLASSES": [
"graphql_auth.mutations.Register",
],
}
`

my usermanagement apps

mutations file
`
import graphene
from graphql_auth import mutations

class AuthMutation(graphene.ObjectType):
register = mutations.Register.Field()

class Mutation(AuthMutation, graphene.ObjectType):
pass
`

queries file
`
from graphql_auth.schema import UserQuery, MeQuery
from .schema import *
import graphene

class Query(UserQuery, MeQuery, graphene.ObjectType):
pass
`

schema file
#Nothing in

In my config project

my schema file
`from core.models import *
from graphene_django import DjangoObjectType
import graphene
from usermanagement.queries import Query as auth_query
from usermanagement.mutations import Mutation as auth_mutation

class Query(auth_query, graphene.ObjectType):
pass

class Mutation(auth_mutation,graphene.ObjectType):
pass

schema = graphene.Schema(query= Query, mutation=Mutation)`

Expected behavior

The query
mutation { register( email: "[email protected]", username: "new_user", password1: "supersecretpassword", password2: "supersecretpassword", ) { success, errors, token, refreshToken } }
The Response
{ "data": { "register": { "success": true, "errors": null, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6Im5ld191c2VyMjIiLCJleHAiOjE1ODAxMzUyMTQsIm9yaWdJYXQiOjE1ODAxMzQ5MTR9.lzMjYo_1LO-TMDotySi1VHoC5yLyKr5PWC2l-hdzQ20", "refreshToken": "8db1c55b8dbc1f4a24eabe6f5d44dc091a8ca0f7" } } }

Actual behavior

The query

mutation {
register(
email: "[email protected]",
username: "new_user",
password1: "supersecretpassword",
password2: "supersecretpassword",
) {
success,
errors,
token,
refreshToken
}
}

The Response

{
"errors": [
{
"message": "Please, enter valid credentials",
"locations": [
{
"line": 3,
"column": 3
}
],
"path": [
"register"
]
}
],
"data": {
"register": null
}
}

Requirements

aniso8601==7.0.0
asgiref==3.4.1
certifi==2021.5.30
cffi==1.14.6
charset-normalizer==2.0.6
coreapi==2.3.3
coreschema==0.0.4
cryptography==3.4.8
defusedxml==0.7.1
Django==3.2.7
django-filter==21.1
django-graphql-auth==0.3.16
django-graphql-jwt==0.3.0
django-templated-mail==1.1.1
djangorestframework==3.12.4
djangorestframework-simplejwt==4.8.0
djoser==2.1.0
graphene==2.1.9
graphene-django==2.15.0
graphql-core==2.3.2
graphql-relay==2.0.1
idna==3.2
importlib-metadata==1.7.0
itypes==1.2.0
Jinja2==3.0.1
MarkupSafe==2.0.1
oauthlib==3.1.1
promise==2.3
psycopg2-binary==2.9.1
pycparser==2.20
PyJWT==1.7.1
python3-openid==3.2.0
pytz==2021.1
requests==2.26.0
requests-oauthlib==1.3.0
Rx==1.6.1
singledispatch==3.7.0
six==1.16.0
social-auth-app-django==4.0.0
social-auth-core==4.1.0
sqlparse==0.4.2
text-unidecode==1.3
typing-extensions==3.10.0.2
uritemplate==3.0.1
urllib3==1.26.7
zipp==3.5.0

@creimers
Copy link

creimers commented Oct 6, 2021

I have the exact same problem.

@OkayItsMikael
Copy link

Same. Not sure what's going wrong here.

@vladcalin
Copy link

vladcalin commented Oct 25, 2021

I have the exact issue.
After digging through the code, it seems that the flow is:

  • in a transaction:
    • the user is created
    • it tries to authenticate the current user and bypasses the graphql_auth.backends.GraphQLAuthBackend auth backend by using the _jwt_token_auth on the request
    • fails because there are no authentication backends to try
    • the whole transaction fails and no user is created

I fixed it by setting in my settings.py file

AUTHENTICATION_BACKENDS = [
    'graphql_auth.backends.GraphQLAuthBackend',
    'django.contrib.auth.backends.ModelBackend',  # important to have this as well.
]

vladcalin added a commit to vladcalin/django-graphql-auth that referenced this issue Oct 25, 2021
There is some confusion caused by the AUTHENTICATION_BACKENDS setup instructions from the documentation, which when not set properly, it will cause confusing errors to appear which are not related to the error source.

Example of such confusion:
- PedroBern#126
@OkayItsMikael
Copy link

Circling back, can confirm that the above missing config was the issue for me too.

@olundberg
Copy link

Circling back, can confirm that the above missing config was the issue for me too.

I can also confirm that this solved my issue which was the same.

@gneyal
Copy link

gneyal commented Sep 8, 2022

Thanks vladcalin - adding 'django.contrib.auth.backends.ModelBackend' worked.

@n3cr0murl0c
Copy link

Hi Working with django graphql auth following the tutorial encountered the same problem, but im working with Django4.0, from the start django-graphql-auth throws a coupple of errors, first:

  • cannot import ugettext
  • cannot import ugettext_lazy
    these ones i've fixed using some answers from stackoverflows cuz django renamed the functions to:
    from django.utils.translation import gettext, gettext_lazy django.utils.translation.ugettext = gettext django.utils.translation.ugettext_lazy = gettext_lazy
  • the last error is about Signals requiring arguments, which no longer is supported in django4.
    patched graphql.signals using:
    user_registered = Signal() user_verified = Signal()

but now when i try to use the class from graphql_auth import mutations.Register to extend another one to pass an argument to register by default using an identification number, it throws:

graphql_jwt\decorators.py", line 90, in wrapper raise exceptions.JSONWebTokenError( graphql.error.located_error.GraphQLLocatedError: Please, enter valid credentials

@n3cr0murl0c
Copy link

Hi Working with django graphql auth following the tutorial encountered the same problem, but im working with Django4.0, from the start django-graphql-auth throws a coupple of errors, first:

  • cannot import ugettext
  • cannot import ugettext_lazy
    these ones i've fixed using some answers from stackoverflows cuz django renamed the functions to:
    from django.utils.translation import gettext, gettext_lazy django.utils.translation.ugettext = gettext django.utils.translation.ugettext_lazy = gettext_lazy
  • the last error is about Signals requiring arguments, which no longer is supported in django4.
    patched graphql.signals using:
    user_registered = Signal() user_verified = Signal()

but now when i try to use the class from graphql_auth import mutations.Register to extend another one to pass an argument to register by default using an identification number, it throws:

graphql_jwt\decorators.py", line 90, in wrapper raise exceptions.JSONWebTokenError( graphql.error.located_error.GraphQLLocatedError: Please, enter valid credentials

manage to fix the issue
adding to settings.py:
`GRAPHQL_AUTH ={
#....
"ALLOW_LOGIN_NOT_VERIFIED":False,

"REGISTER_MUTATION_FIELDS":{
    "email":"String",
    "username":"String",
    "first_name":"String",
    "last_name":"String",
    "custom_field_to_authenticate":"String"
    },

#...
`

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants