Social-auth-app-django: как отключить пользователя без пароля

На моем сайте (www.raptors.ru) я использую social-auth-app-django для авторизации пользователей из Facebook. Чтобы облегчить им вход на сайт, я сделал следующие настройки:

ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = True

, чтобы пользователям не нужно было вводить свой пароль. Когда пользователь FB входит в систему в первый раз, создается запись в таблице users. Что важно, у этого пользователя нет пароля на моем сайте. Однако этот пользователь полностью функционален: он может публиковать посты, делать комментарии и т.д. Проблемы начинаются, если пользователь хочет отключиться от своего социального аккаунта. Во-первых, если пользователь пытается отключить свой аккаунт через LoginCancelledView (прямая ссылка https://raptors.ru/accounts/social/login/cancelled/), он получает сообщение, что он успешно отключился, но это неправда, поскольку его имя пользователя все еще отображается в заголовке страницы (см. скриншот).

Wrong success message (the user is still connected and logged in

Второй способ отключения - со страницы соединений (https://raptors.ru/accounts/social/connections/).

Connections page

Однако, если пользователь нажимает кнопку Remove, Django не делает этого и сообщает следующую ошибку: Ваш аккаунт не имеет установленного пароля.

The error report

Подскажите, пожалуйста, какой правильный и рабочий способ отключить (или полностью удалить) пользователя Facebook с моего сайта? FB настаивает, что я должен предоставить такую возможность.

Allauth предоставляет представление для установки пароля существующего пользователя, которое может быть использовано для добавления пароля пользователю, который ранее имел только социальный логин. Из документации :

Аутентифицированные пользователи могут управлять своим паролем, используя представления allauth.account.views.PasswordSetView и allauth.account.views.PasswordChangeView, расположенные по адресу /accounts/password/set/ соответственно /accounts/password/change/ (имена URL account_set_password и account_change_password соответственно).

Пользователи перенаправляются между этими представлениями в зависимости от того, установили они пароль или нет (user.has_usable_password()). Обычно, когда пользователи регистрируются через социального провайдера, они не устанавливают пароль.

.

Сначала пользователь должен установить пароль (перейдя в /accounts/password/set/), а затем отключить социальный аккаунт.

Существует метод logout (django.contrib.auth), который может быть использован для этого, например. в моем views.py:

from django.contrib.auth import logout
from django.shortcuts import redirect
...
def logout_request(request)
    logout(request)
    return redirect('/')

и в моем urls.py, чтобы вызвать этот метод:

urlpatterns =[
    ...,
    path('logout', views.logout_request, name="logout),

]

и это работает для меня

Вернуться на верх