Посты с тэгом social network


Django Social Auh и авторизация в приложениях для ВКонтакте: пример

Пример добавлен в мой fork и в главную ветку вот в этом pull request.



Django Social Auth and Facebook Canvas Applications: Example

Illustrating technology described here I’ve added an example code to DSA in this pull request. Enjoy



Django Social Auh и авторизация в приложениях для ВКонтакте

Кроме авторизации в приложениях для Facebook в ходе работы над проектом была решена еще одна задача – авторизация в приложениях для ВКонтакте. Как и в случае с Facebook, у меня было сильное желание не делать два раза одну и ту же работу, а использовать одну и ту же базу пользователей и один и тот же механизм для авторизации через сайт ВКонтакте и для авторизации в iframe-приложении ВКонтакте. Это удалось решить без особых сложностей, и вот наконец пришло время сорвать покров тайны с некоторых загадочных настроек.

Особенности ВКонтакте

В отличие от Facebook, у ВКонтакте есть одна принципиальная особенность, которая несколько затрудняет решение этой задачи, а именно: вы не можете использовать одно и то же приложение для авторизации через OAuth и для авторизации в iframe-приложении. Вам необходимо зарегистрировать iframe-приложение для ВКонтакте отдельно и получить для нег



Django Social Auth and Facebook Canvas Applications

This post will be on English in order to be useful for a wider audience of developers.

Signed request authorization

Django Social Auth supports authentication via Facebook by default. When my project required to develop a Facebook application as another interface for our service I’ve got a natural desire to use the same authorization framework we use for login. This would be quite efficient and handy in terms of re-use of existing users database and well-known code. Unfortunately, authentication process for Canvas applications is different comparing to normal OAuth. Looking to Facebook manual you see:

In order to create a personalized user experience, Facebook sends your app information about the user. This information is passed to your Canvas URL using HTTP POST within a single signed_request parameter which contains a base64url encoded JSON object.



Facebook iframe-приложения и Django CSRF

Первое, что видят начинающие разработчики iframe-приложений для Facebook при обращении к их canvas view, – сообщение об ошибке CSRF. Связано это с тем, что при запуске iframe-приложения Facebook автоматически выполняет на canvas URL POST-запрос с информацией о текущем пользователе. Странно было бы ожидать в нем правильного CSRF-token. Обычной практикой является полный отказ от CSRF для Facebook. Другой вариант — это написание своих CSRF-токенов и их ручная проверка. Но небольшое исследование показало, что вполне можно пользоваться стандартным механизмом Django, если научиться проверять CSRF не всегда, а только когда это необходимо. А точнее, проверять CSRF стоит лишь в том случае, когда в POST-запросе нет корректного signed_request с access_token — его наличие недвусмысленно говорит нам о том, что POST-запрос пришел от Facebook. Вот как это решилось в нашем случае:

# Description for enlgish-speaking users:
# Easy and standard way to manage CSRF when developing Django


Django Social Auth: now with images

В рамках текущего проекта возникла задача при регистрации пользователей через социальную сеть кроме их контактных данных получать еще и изображение. Небольшое расследование показало, что каждая сеть практикует свой метод отдачи изображений, что в результате вылилось в следующий код, который вызывается в обработчике сигнала pre_update:

from social_auth.signals import pre_update

@receiver(pre_update)
def update_person_details(sender, **kwargs):
    person = kwargs.get('user')
    details = kwargs.get('details')

…

    load_person_avatar(sender, person, kwargs.get('response'))
…

def load_person_avatar(sender, person, info):
    image_url = None

    if sender.name == 'vkontakte-oauth2':
        vk_response = info.get('response')
        if vk_response:
            image_url = vk_response.get('user_photo') # If photo is absent user_photo is absent too

    elif sender.name == 'odnoklassniki':
        image_url = info.get('pic_2')
        if 'stub' in image_url: # No real im


Новости Django Social Auth – 2

Предыдущие новости см. здесь.

В коммите добавлены:

  1. Поддержка OAuth 2.0 для ВКонтакте
  2. Поддержка OAuth 2.0 для Mail.ru
  3. Решена проблема с return_to. Одна строчка правок потребовала усилий со стороны четырех человек, вот как бывает.

Следующий коммит будет не раньше середины мая: уезжаю в отпуск.



Новости Django Social Auth

В продолжение статьи «Авторизация в социальных сетях для Django».

Основная ветка проекта развивается довольно интенсивно, добавилась поддержка LinkedIn, Google OAuth2, тесты и большое количество мелких, но полезных фитюлечек, вроде автоматического ассоциирования пользователя по e-mail.

Замечена интересная особенность Google OpenID. Если ваш сайт поддерживает «сквозную» авторизацию на поддоменах и вам принципиально, чтобы человек, авторизовавшийся в одном поддомене, мог продолжать работать без авторизации и в другом, я рекомендую воспользоваться Google OAuth. Фишка в том, что Google OpenID выдает разные id пользователя для разных поддоменов одного и того же сайта. Так как библиотека не может определить, что пользователь, который пришел на поддомен ААА, уже был зарегистрирован в поддомене БББ, в результате создается новая учетная запись. У OAuth такой проблемы нет, зато есть два плюса: вы гаран



Авторизация в социальных сетях для Django

Зачем

Когда в нашем проекте возникла необходимость реализовать авторизацию через социальные сети, я по совету Ромы Ворушина просмотрел несколько готовых решений, чтобы не изобретать уже многократно изобретенный велосипед. Оказалось, что не все велосипеды умеют ездить туда, куда нам нужно, и в точности так, как именно нам нужно:

  1. Кроме крупных мировых сетей хотелось также работать с LiveJournal, Yandex и ВКонтакте.
  2. Нужна была возможность контролировать действия системы после успешной авторизации, то есть управлять процессом обработки полученной от сервиса информации о пользователях.

Я остановился на https://github.com/omab/django-social-auth: просмотрев исходники, я увидел, что их немного, а написано все понятно. Изначально библиотека поддерживала Facebook, Twitter, Google, OpenID и OpenAuth и процесс работы с БД был немного не такой, как хотелось бы. Форка было не избежа



Введение

Так получилось, что моя работа связана с web-разработкой, причем на PHP. После участия в паре проектов для меня стали очевидны некоторые минусы PHP в частности и использования компонентных фреймворков (Zend Framework).

Я немного знаю Python и Django, которые, вероятно, не обладают этими недостатками, но возможности применить их в реальном проекте не было. Поэтому я решил параллельно с проектом PHP + Zend Framework на работе, разработать похожий на Python + Django, дабы сравнить эти технологии в "боевых условиях". Весь процесс разработки с комментариями и моими мыслями я буду описывать в этом блоге.

Для оценки возможностей Django был выбран, так популярный в наши дни, сервис коллективных блогов с элементами социальности.

Примерный список