loginza + django-avatars + facebook + vkontakte

Авторизуємось через loginza, і якщо facebook нам віддає ім'я і аватар юзернейма, зберігаємо у моделі користувачів.

def loginza_auth_handler(sender, user, identity, **kwargs):
    try:
        #loginza_models.UserMap.objects.get(user=user, verified=True)
        map = loginza_models.UserMap.objects.get(user=user)
        data = json.loads(map.identity.data)

        if data['provider'] == "http://www.facebook.com/":
            system_user = User.objects.get(username=user)
            if data['name']['first_name']:
                system_user.first_name = data['name']['first_name']
            if data['name']['last_name']:
                system_user.last_name = data['name']['last_name']
            if data['photo']:
                try:
                    Avatar.objects.get(user=system_user)
                except:
                    (filename, headers) = urllib.urlretrieve(data['photo'])
                    img_name = '%s.jpg' % os.path.basename(filename)
                    copy_path = os.path.join(settings.MEDIA_ROOT, settings.AVATAR_STORAGE_DIR, system_user.username, img_name)
                    copy_dir = os.path.join(settings.MEDIA_ROOT, settings.AVATAR_STORAGE_DIR, system_user.username)
                    if not os.path.isdir(copy_path):
                        os.makedirs(copy_dir)
                    shutil.copy2(filename, copy_path)
                    path_ava = os.path.join(settings.AVATAR_STORAGE_DIR, system_user.username, img_name)

                    avatar = Avatar(
                        user = system_user,
                        primary = True,
                        avatar = path_ava,
                    )
                    avatar.save()
            system_user.save()

        auth.login(sender, user)

Для Вконтактє ситуація аналогічна, лише Вконтактє віддає малюнок з розширенням, а Фейсбук без.

Немає коментарів: