Django allauth OSError: [Errno 99] Address not available

Viewed 229

I'm trying to implement django-allauth and faced this problem. For this project I'm using Docker as well. When I click "Sign up using VK" it redirects me to http://127.0.0.1:8000/accounts/vk/login/callback/?code=...random code... with this error. After going to sign up page again and clicking the same button it successfully redirects me to profile page which means the user was created. I couldn't find any solutions using Google so hope you can help.

I don't think that was because of bad configuration because I've tested similar configuration on empty django project which was not containerized and everything worked properly. Maybe it's because inside docker container there's venv installed.

Traceback:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/vk/login/callback/?code=5d6083ab180253fa42&state=JDhRkbbzqV2m

Django Version: 3.2.8
Python Version: 3.9.7
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'coreapp',
 'crispy_forms',
 'rest_framework',
 'corsheaders',
 'easy_thumbnails',
 'django_cleanup',
 'storages',
 'allauth',
 'allauth.account',
 'allauth.socialaccount',
 'allauth.socialaccount.providers.vk']
Installed Middleware:
['whitenoise.middleware.WhiteNoiseMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'corsheaders.middleware.CorsMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "/py/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/py/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/providers/oauth2/views.py", line 77, in view
    return self.dispatch(request, *args, **kwargs)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/providers/oauth2/views.py", line 147, in dispatch
    return complete_social_login(request, login)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/helpers.py", line 151, in complete_social_login
    return _complete_social_login(request, sociallogin)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/helpers.py", line 172, in _complete_social_login
    ret = _process_signup(request, sociallogin)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/helpers.py", line 43, in _process_signup
    ret = complete_social_signup(request, sociallogin)
  File "/py/lib/python3.9/site-packages/allauth/socialaccount/helpers.py", line 177, in complete_social_signup
    return complete_signup(
  File "/py/lib/python3.9/site-packages/allauth/account/utils.py", line 209, in complete_signup
    return perform_login(
  File "/py/lib/python3.9/site-packages/allauth/account/utils.py", line 172, in perform_login
    send_email_confirmation(request, user, signup=signup, email=email)
  File "/py/lib/python3.9/site-packages/allauth/account/utils.py", line 346, in send_email_confirmation
    email_address.send_confirmation(request, signup=signup)
  File "/py/lib/python3.9/site-packages/allauth/account/models.py", line 62, in send_confirmation
    confirmation.send(request, signup=signup)
  File "/py/lib/python3.9/site-packages/allauth/account/models.py", line 169, in send
    get_adapter(request).send_confirmation_mail(request, self, signup)
  File "/py/lib/python3.9/site-packages/allauth/account/adapter.py", line 464, in send_confirmation_mail
    self.send_mail(email_template, emailconfirmation.email_address.email, ctx)
  File "/py/lib/python3.9/site-packages/allauth/account/adapter.py", line 136, in send_mail
    msg.send()
  File "/py/lib/python3.9/site-packages/django/core/mail/message.py", line 284, in send
    return self.get_connection(fail_silently).send_messages([self])
  File "/py/lib/python3.9/site-packages/django/core/mail/backends/smtp.py", line 102, in send_messages
    new_conn_created = self.open()
  File "/py/lib/python3.9/site-packages/django/core/mail/backends/smtp.py", line 62, in open
    self.connection = self.connection_class(self.host, self.port, **connection_params)
  File "/usr/local/lib/python3.9/smtplib.py", line 255, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/local/lib/python3.9/smtplib.py", line 341, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/local/lib/python3.9/smtplib.py", line 312, in _get_socket
    return socket.create_connection((host, port), timeout,
  File "/usr/local/lib/python3.9/socket.py", line 844, in create_connection
    raise err
  File "/usr/local/lib/python3.9/socket.py", line 832, in create_connection
    sock.connect(sa)

Exception Type: OSError at /accounts/vk/login/callback/
Exception Value: [Errno 99] Address not available

settings.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'django.contrib.sites',

    # Custom apps
    'coreapp',
    'crispy_forms',
    'rest_framework',
    'corsheaders',
    'easy_thumbnails',
    'django_cleanup',
    'storages',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.vk',
]

SITE_ID = 1

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
)

SOCIALACCOUNT_PROVIDERS = {
    "vk": {
        "APP": {
            "client_id": int(os.environ.get('VK_OAUTH2_ID')),
            "secret": os.environ.get('VK_OAUTH2_SECRET'),
        },
        "SCOPE": {
            "profile",
            "email",
        },
    },
}

In login template I used:

{% load socialaccount %}
<a href="{% provider_login_url "vk" method="oauth2" %}"> Sign up using VK </a>

Dockerfile:

FROM python:3.9-alpine3.13

ENV PYTHONUNBUFFERED 1

COPY ./requirements.txt /requirements.txt
COPY ./placerem /placerem
COPY ./scripts /scripts

WORKDIR /placerem

# Installing npm packages
RUN apk add --update --no-cache nodejs npm && \
    npm ci

RUN python -m venv /py && \
    /py/bin/pip install --upgrade pip && \
    apk add --update --no-cache postgresql-client && \
    apk add --update --no-cache --virtual .tmp-deps \
        build-base jpeg-dev postgresql-dev musl-dev linux-headers \
        zlib-dev libffi-dev openssl-dev python3-dev cargo && \
    apk add --update --no-cache libjpeg && \
    /py/bin/pip install -r /requirements.txt && \
    apk del .tmp-deps && \
    adduser --disabled-password --no-create-home placerem && \
    mkdir -p /vol/web/static && \
    mkdir -p /vol/web/media && \
    chown -R placerem:placerem /vol && \
    # Or you'll get permission denied error
    chown -R placerem:placerem /py/lib/python3.9/site-packages && \
    chown -R placerem:placerem package.json && \
    chmod -R +x /scripts

ENV PATH="/scripts:/py/bin:/py/lib:$PATH"

USER placerem

CMD ["run.sh"]
1 Answers

I found out what was wrong.

Setting this to "none" resolved this issue.

In settings.py add:

ACCOUNT_EMAIL_VERIFICATION = "none"
Related