Evgenii Legotckoi
Evgenii LegotckoiOct. 27, 2018, 7:36 p.m.

Django - Tutorial 040. How to add authentication through social networks. Facebook

I added authorization on the site through Facebook.

At the same time collected a couple of pitfalls.

Before Facebook , I already added in authorization through the social network VKontakte and Google . And here I needed to create a privacy policy page, since Facebook requires this page and also requires a user agreement, but I provided a privacy policy page. I think that with the growth of the site I will add a full-fledged page of the user agreement, although it is unknown when it will be. However, the site rules are described in sufficient detail.

Also came across a strict need for https from the site. Generally, if you consider that I have https from Let`s Encrypt , I didn’t think that there would be any problem, but as it turned out, by default django-social-auth forms the return address with HTTP protocol, and for using HTTPS You need to specify this in the settings.

And now let's see how this is done.


Application registration

To use authentication, you need to register an application. I will not go into the basic details of creating an application. But I will indicate the main settings of the application.

You will receive the application ID and the application secret key.

Specify the application domain, as well as the privacy policy URL and the user agreement URL.

And then specify the url to redirect registration through OAuth.

settings.py

Add the necessary settings to the settings.py file.

Configure the application ID and secret key. And also that we want to receive from the user profile. I only need email at this stage.

SOCIAL_AUTH_FACEBOOK_KEY = 'XXXXXXXXX'
SOCIAL_AUTH_FACEBOOK_SECRET = 'XXXXXXXXX'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

And also indicate that we want to use HTTPS . Otherwise, Facebook will swear.

SOCIAL_AUTH_REDIRECT_IS_HTTPS = True

We specify the Backend for authentication.

AUTHENTICATION_BACKENDS = (
    ...
    'social_core.backends.facebook.FacebookOAuth2',
    ...
)

Well, we specify the url for authentication

<a href="{% url 'social:begin' 'facebook' %}">Facebook</a>
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

AlexanderBardin
  • March 19, 2019, 8:57 a.m.

Добрый день. А проверить работоспособность локально как-то можно не указывая реальнй сайт (еще в разработке)

Evgenii Legotckoi
  • March 20, 2019, 5:45 a.m.

Добрый день.

Поппробуйте домен localhost, а url соответственно http://localhost

Возможно, потребуется указать порт. Например, так http://localhost:8000

АБ
  • March 21, 2019, 5:35 a.m.
  • (edited)

как быть с такой ошибкой: конечный uri не внесен в белый список в разделе Клиентские настройки OAuth?

Evgenii Legotckoi
  • March 21, 2019, 5:45 a.m.

FaceBook по умолчанию направляет на https, у вас видимо http протокол. Исправьте протокол в настройках.

АБ
  • March 21, 2019, 6:06 a.m.

данная строчка у меня есть: SOCIAL_AUTH_REDIRECT_IS_HTTPS = True

АБ
  • March 21, 2019, 6:07 a.m.

адрес сайта uri перенасправления пишу так: https://мойсайт.site/

АБ
  • March 21, 2019, 6:17 a.m.

где брать действительный uri перенаправления?

Evgenii Legotckoi
  • March 21, 2019, 6:46 a.m.

Вы у себя urls прописывали?

urlpatterns = [
    ...
    path('', include('social_django.urls')),
]

В статье по настройке авторизации для ВКонтакте есть базовый мануал .

АБ
  • March 21, 2019, 7:02 a.m.
  • (edited)

Да, конечно VK работает, настраивал по вашему мануалу, а тут прям какойто ступор: https://amadowshop.site/auth/register/

Evgenii Legotckoi
  • March 21, 2019, 7:04 a.m.
  • (edited)

Вы прописывали url в действительные uri перенаправления так?

https://amadowshop.site/complete/facebook/

АБ
  • March 21, 2019, 7:15 a.m.

прописал, та же ошибка ...(((

Evgenii Legotckoi
  • March 21, 2019, 7:25 a.m.

ох тыж, как глубоко запихали авторизацию.

У вас по ходу такой url формируется

https://amadowshop.site/auth/verify/vk/oauth2/complete/facebook/

АБ
  • March 21, 2019, 7:35 a.m.

да, спасибо, этот урл зарабтал, методом перебеора в итоге поймал )))
https://amadowshop.site/auth/verify/vk/oauth2/complete/facebook/

Evgenii Legotckoi
  • March 21, 2019, 7:38 a.m.

ну я просто глянул у вас страницу авторизации и обнаружил, что вы очень глубоко запихали include('social_django.urls')

А вообще, вот эта часть выглядит некрасиво в вашем url auth/verify/vk/oauth2/ . Наличие упоминания vk там вообще ни к чему

АБ
  • March 21, 2019, 8:26 a.m.

url подкорректировал, но теперь ошибка и адрес сменился на https://amadowshop.site/auth/verify/login/facebook/

Evgenii Legotckoi
  • March 21, 2019, 8:47 a.m.

не вижу здесь проблемы, поменяйте url для callback в приложения oauth в социальных сетях

https://amadowshop.site/auth/verify/complete/facebook/

АБ
  • March 21, 2019, 11 a.m.

а это где? сейчас ошибка в debag такая:
Page not found (404)
Request Method: GET
Request URL: http://amadowshop.site/accounts/profile/

Evgenii Legotckoi
  • March 21, 2019, 11:49 a.m.

серьезно? Эта ошибка 404 уже даже не относится к данному вопросу.

В каких-то urls в вашем проекте.

Вопросы, которые не относятся непосредственно к статье, задавайте, пожалуйста на форуме . Оффтопы не нужно делать.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
MB

Qt - Test 001. Signals and slots

  • Result:57points,
  • Rating points-2
MB

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
GK

C++ - Test 005. Structures and Classes

  • Result:0points,
  • Rating points-10
Last comments
J
JonnyJoJune 8, 2023, 12:14 p.m.
Qt/C++ - Lesson 019. How to paint triangle in Qt5. Positioning shapes in QGraphicsScene Евгений, здравствуйте! Решил поэкспериментировать немного с кодом из этого урока, нарисовать вместо треугольника квадрат и разобраться с координатами. В итоге, запутался. И ни документация,…
J
JonnyJoMay 25, 2023, 2:24 p.m.
How to make game using Qt - Lesson 2. Animation game hero (2D) Евгений, благодарю!
Evgenii Legotckoi
Evgenii LegotckoiMay 25, 2023, 4:49 a.m.
How to make game using Qt - Lesson 2. Animation game hero (2D) Код на строчка 184-198 вызывает перерисовку области на каждый 4-й такт счётчика. По той логике не нужно перерисовывать объект постоянно, достаточно реже, чем выполняется игровой слот. А слот вып…
J
JonnyJoMay 21, 2023, 10:49 a.m.
How to make game using Qt - Lesson 2. Animation game hero (2D) Евгений, благодарю! Всё равно не совсем понимаю :( Если муха двигает ножками только при нажатии клавиш перемещение, то что, собственно, делает код со строк 184-198 в triangle.cpp? В этих строчка…
Evgenii Legotckoi
Evgenii LegotckoiMay 21, 2023, 5:57 a.m.
How to make game using Qt - Lesson 2. Animation game hero (2D) Добрый день. slotGameTimer срабатывает по таймеру и при каждой сработке countForSteps увеличивается на 1, это не зависит от нажатия клавиш, нажатая клавиша лишь определяет положение ножек, котор…
Now discuss on the forum
T
TwangerJune 7, 2023, 11:12 a.m.
Ошибка при выполнении триггерной функции (GreenPlum) Есть 3 таблицы fact_amount со структурой: CREATE TABLE fact_amount ( id serial4 NOT NULL, fdate date NULL, type_activity_id int4 NULL, status_id int4 NULL, CONSTRAINT fact…
AR
Alexander RyabikovJune 6, 2023, 1:35 p.m.
Работа с QFileSystemModel Вопросик по теме QFileSystemModel в Linux. Он, как и положено, обновляется самостоятельно, если директория локальная. Но, вот, сетевая папка (у меня шара samba) не обновляется. Как её можно…
Evgenii Legotckoi
Evgenii LegotckoiApril 16, 2023, 4:07 a.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Да, это возможно. Но подобные вещи лучше запускать через celery. То есть drf принимает команду, и после этого регистрирует задачу в celery, котроый уже асинхронно всё это выполняет. В противном …
АБ
Алексей БобровDec. 14, 2021, 7:03 p.m.
Sorting the added QML elements in the ListModel I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …

Follow us in social networks