Has anybody had this before?

Here is the question on SO (which is better formatted) - 
https://stackoverflow.com/questions/69057713/unable-to-log-in-the-user-using-django-channels-because-connection-is-already-c

I'm unable to log a user in with the login function provided by Django 
Channels.

I have this mutation using graphene django -
class SignIn(DjangoFormMutation):
  profile = graphene.Field(ProfileNode) 
  
  @classmethod 
  def get_form_kwargs(cls, root, info, **input): 
    kwargs = super().get_form_kwargs(root, info, **input) 
    kwargs["request"] = info.context 
    return kwargs 

   class Meta: 
     form_class = AuthenticationForm # username is in fact email for user 
     fields = ('username', 'password',)

  @classmethod 
  def perform_mutate(cls, form, info): 
    # form is valid 
    user = form.get_user() 
    profile = user.profile 
async_to_sync(channels.auth.login)(info.context.__dict__, user)
    change_session_and_login(info.context, user) 
    return cls(errors=[], profile=profile) 

This is based on the advice from the package I am using for using 
websockets with graphene - 
https://github.com/datadvance/DjangoChannelsGraphqlWs#authentication

I am getting this tracebook though, which, to me, suggests a problem with 
the async_to_sync.

The only obvious difference I can see is I'm getting the dict by calling 
*dict* on the context whereas the example in the link above uses _asdict 
(not sure why because this method is not an option for me when I try).


This is the full traceback -

Traceback (most recent call last): File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/promise/promise.py",
 
line 489, in _resolve_from_executor executor(resolve, reject) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/promise/promise.py",
 
line 756, in executor return resolve(f(*args, **kwargs)) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/graphql/execution/middleware.py",
 
line 75, in make_it_promise return next(*args, **kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/graphene/relay/mutation.py",
 
line 70, in mutate result = cls.mutate_and_get_payload(root, info, **input) 
File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/graphene_django/forms/mutation.py",
 
line 51, in mutate_and_get_payload return cls.perform_mutate(form, info) 
File "/home/ross/Desktop/web_dev/projects/chat/user/schema.py", line 219, 
in perform_mutate async_to_sync(channels.auth.login)(info.context.__dict__, 
user) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/asgiref/sync.py",
 
line 223, in __call__ return call_result.result() File 
"/usr/lib/python3.8/concurrent/futures/_base.py", line 437, in result 
return self.__get_result() File 
"/usr/lib/python3.8/concurrent/futures/_base.py", line 389, in __get_result 
raise self._exception File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/asgiref/sync.py",
 
line 292, in main_wrap result = await self.awaitable(*args, **kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/asgiref/sync.py",
 
line 444, in __call__ ret = await asyncio.wait_for(future, timeout=None) 
File "/usr/lib/python3.8/asyncio/tasks.py", line 455, in wait_for return 
await fut File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/asgiref/current_thread_executor.py",
 
line 22, in run result = self.fn(*self.args, **self.kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/channels/db.py",
 
line 13, in thread_handler return super().thread_handler(loop, *args, 
**kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/asgiref/sync.py",
 
line 486, in thread_handler return func(*args, **kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/channels/auth.py",
 
line 93, in login session.cycle_key() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py",
 
line 344, in cycle_key self.create() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py",
 
line 51, in create self._session_key = self._get_new_session_key() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/contrib/sessions/backends/base.py",
 
line 196, in _get_new_session_key if not self.exists(session_key): File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/contrib/sessions/backends/db.py",
 
line 47, in exists return 
self.model.objects.filter(session_key=session_key).exists() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/models/query.py",
 
line 808, in exists return self.query.has_results(using=self.db) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/models/sql/query.py",
 
line 552, in has_results return compiler.has_results() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 
line 1145, in has_results return bool(self.execute_sql(SINGLE)) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 
line 1173, in execute_sql cursor = self.connection.cursor() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/graphene_django/debug/sql/tracking.py",
 
line 41, in cursor return state.Wrapper(connection._graphene_cursor(), 
connection, panel) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/utils/asyncio.py",
 
line 26, in inner return func(*args, **kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/backends/base/base.py",
 
line 259, in cursor return self._cursor() File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/backends/base/base.py",
 
line 237, in _cursor return self._prepare_cursor(self.create_cursor(name)) 
File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/utils.py",
 
line 90, in __exit__ raise dj_exc_value.with_traceback(traceback) from 
exc_value File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/backends/base/base.py",
 
line 237, in _cursor return self._prepare_cursor(self.create_cursor(name)) 
File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/utils/asyncio.py",
 
line 26, in inner return func(*args, **kwargs) File 
"/home/ross/.local/share/virtualenvs/chat-A0fEktPe/lib/python3.8/site-packages/django/db/backends/postgresql/base.py",
 
line 236, in create_cursor cursor = self.connection.cursor() 
graphql.error.located_error.GraphQLLocatedError: connection already closed


-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/20fdae21-4da5-4c3f-9898-ed7ad989d2c4n%40googlegroups.com.

Reply via email to