Comments 62
Учитывая количество сайтов, посвящённых краже паролей «ВКонтакте», я бы на месте пользователей последнего не торопился пользоваться возможностью авторизации на стороннем сайте.
… Посмотреть сайт с рабочим примером вы можете на этом сайте…
немного тавтологично, а за статью краткую емкую и понятную большое спасибо.
немного тавтологично, а за статью краткую емкую и понятную большое спасибо.
Интересно, да.
Я джанго давно не использовал, по сему, возможно, глупый вопрос: а это и правда всё что нужно?
d-pa подхватит настройки и будет использовать VKONTAKTE только как префикс?
Хорошо было бы выложить небольшое приложение-пример, в котором есть необходимый минимум кода и только.
Хотелось бы ещё узнать о том как работать с информацией из ВКонтакте, т.е. информацией профайлов.
В общем, статья полезна как анонс для «нормальной статьи», но, увы, не более.
Кстати, порадовало как на pyplanet.org можно аутентифицировтаься одной кнопкой не вводя полный путь до openid-акаунта гугла. Вот про это хотелось бы тоже небольшую статью.
Я джанго давно не использовал, по сему, возможно, глупый вопрос: а это и правда всё что нужно?
d-pa подхватит настройки и будет использовать VKONTAKTE только как префикс?
Хорошо было бы выложить небольшое приложение-пример, в котором есть необходимый минимум кода и только.
Хотелось бы ещё узнать о том как работать с информацией из ВКонтакте, т.е. информацией профайлов.
В общем, статья полезна как анонс для «нормальной статьи», но, увы, не более.
Кстати, порадовало как на pyplanet.org можно аутентифицировтаься одной кнопкой не вводя полный путь до openid-акаунта гугла. Вот про это хотелось бы тоже небольшую статью.
Поддерживаю, живой пример с минимумом кода очень нужен. И насчет инфы из профилей.
Именно бэкенд от Вконтакте.ру не умеет дополнительную инфу вытаскивать, просто потому что я не нашёл хорошей библиотеки на питоне для работы с их API. В OpenId, OAuth и FacebookConnect такая возможность есть, нужно просто указать в настройках. О том что конкретно нужно указать написано на вики от django-publicauth. Ещё один интересный момент — если стянутой дополнительной инфы достаточно для создания профиля, то дополнительный шаг не понадобится, сразу создастя профиль и юзера авторизирует.
Хорошо, сделаю чистый проект только с авторизацией и пару дополнительными полями профиля и выставлю где нибудь.
Хорошо, сделаю чистый проект только с авторизацией и пару дополнительными полями профиля и выставлю где нибудь.
А Вам еду мама разжевывала?
Не рыба, не мясо. Скучно.
Ругается: Recv err: ReferenceError: Security error: attempted to read protected variable: VK
Да, у одного из десяти примерно случается такая проблема, честно говоря не знаю куда копать… Наверное просто подожду пока в интернете появится хотя бы пояснение проблемы, а может это баг на стороне вконтакте.ру и проблема сама решится.
Инициализация API может завершиться неуспешно только в том случае, если браузер пользователя не поддерживает функции обмена сообщениями между окнами window.postMessage и при этом не имеет установленного Flash-плеера.
Знаете, что еще может быть. У меня дома в Опере какой-то глюк, или секретная настройка, ни одна страница не открывается в новом окне. Соответственно, когда я нажал кнопку «Вконтакте.ru», у меня страница открылась в том же окне. На работе такого, открылась в новом, и я успешно авторизовался. Так что копайте этот глюк в сторону блокировки всплывающих окон.
К сожалению это единственный способ начать процесс аутентификации предусмотренный Вконтакте.ру.
Не хотите сделать ссылку «Проникнуть в сайт» контрастнее?
На моем мониторе я её долго искал.
На моем мониторе я её долго искал.
я вообще такие вещи стремаюсь использовать…
ps: я не трус, но я боюсь
ps: я не трус, но я боюсь
Не плохо бы еще показать код вьюшки publicauth-complete, той части, где идет работа с вконтакте.
Так опенсорс же, кто мешает глянуть на странице приложения? А если быть конкретным то задействовано два файла
bitbucket.org/offline/django-publicauth/src/tip/publicauth/views.py#cl-41
bitbucket.org/offline/django-publicauth/src/tip/publicauth/backends/vkontakte.py
ну и наверное стоит глянуть класс от которого наследуется последний файл.
bitbucket.org/offline/django-publicauth/src/tip/publicauth/views.py#cl-41
bitbucket.org/offline/django-publicauth/src/tip/publicauth/backends/vkontakte.py
ну и наверное стоит глянуть класс от которого наследуется последний файл.
а Твиттер новый API выпустили… Вчера вроде ещё не было…
Спасибо за пример, срочно реализуем.
Авторизация нужна таким, как я! У меня группа созданая под сайт, в группе 56000 человек из них 40-50 в день переходит на сайт, но не авторизуется в нём а прото что-то читает. Так вот теперь процесс авторизации для этих людей будет сильнео упрощен и это меня радует.
Авторизация нужна таким, как я! У меня группа созданая под сайт, в группе 56000 человек из них 40-50 в день переходит на сайт, но не авторизуется в нём а прото что-то читает. Так вот теперь процесс авторизации для этих людей будет сильнео упрощен и это меня радует.
Это не авторизация. Это — аутентификация.
Авторизация — это не аутентификация.
Аутентификация — это не авторизация.
Это не авторизация. Это — аутентификация.
Авторизация — это не аутентификация.
Аутентификация — это не авторизация.
Это не авторизация. Это — аутентификация.
В одном из комментариев я как раз написал, что вечно путаю эти два понятия. Но в случае с Вконтакте это всё таки авторизация которую я использую как аутентификацию. То же самое и с провайдерами oAuth.
Лучше бы наоборот сделали. OpenID какой-нить или гугло-авторизацию
Скажите плиз, а как как этот способ входа на сайт уживается вместе со стандартной системой от разработчиков? Вошедший через вконтакт человек является полноценным пользователем сайта? При первом логине ему создаётся запись в таблице пользователей?
Спасибо за отличный код!
У меня есть небольшой вопрос, можно ли вообще отрубить EXTRA_FORM?
Получается что пользователю приходится 2 формы заполнять в профиле и при регистрации.
У меня есть небольшой вопрос, можно ли вообще отрубить EXTRA_FORM?
Получается что пользователю приходится 2 формы заполнять в профиле и при регистрации.
Вам нужно просто указать путь до своей EXTRA_FORM, в которой может не быть вообще полей, а только метод save(). Как я уже писал в одном комментарии если дополнительные данные не нужны или их достаточно из вытянутых то второй шаг пропустится. Так что создайте новый класс формы и укажить путь до него в настройках EXTRA_FORM или сделайте сабкласс и удалите в нём поле юзернэйм. наверное это делается так
def __init__(self):
del self.base_fields['username']
super(YourClass, self).__init__()
def __init__(self):
del self.base_fields['username']
super(YourClass, self).__init__()
После удаления поля форма все равно остается, я так понимаю из конструктора формы нельзя непосредственно вызвать ее сохранение.
вот эта функция отвечает за авторегистрацию bitbucket.org/offline/django-publicauth/src/tip/publicauth/backends/__init__.py#cl-79
Путь до новой формы глявное что бы не был таким — «forms.ExtraForm», иначе первым делом он будет искать такую форму в папке publicauth и соответсвенно вместо вашей формы вызовет её. В общем главное что бы этот стринг отличался.
Путь до новой формы глявное что бы не был таким — «forms.ExtraForm», иначе первым делом он будет искать такую форму в папке publicauth и соответсвенно вместо вашей формы вызовет её. В общем главное что бы этот стринг отличался.
class LoginPass(ExtraForm):
#dummy = forms.CharField()
def __init__(self, initial):
try:
del self.base_fields['username']
finally:
super(LoginPass, self).__init__()
def save(self, request, identity, provider):
pass
в сеттингс PUBLICAUTH_EXTRA_FORM = «myapp.forms.LoginPass»
мне показывается пустая форма без полей, но с кнопочной сабмит. А как в принципе от нее избавиться?
#dummy = forms.CharField()
def __init__(self, initial):
try:
del self.base_fields['username']
finally:
super(LoginPass, self).__init__()
def save(self, request, identity, provider):
pass
в сеттингс PUBLICAUTH_EXTRA_FORM = «myapp.forms.LoginPass»
мне показывается пустая форма без полей, но с кнопочной сабмит. А как в принципе от нее избавиться?
Ну тогда попробуйте полностью форму себе скопировать, без сабклассинга, удалите оттуда атрибут username, а в строчке
bitbucket.org/offline/django-publicauth/src/tip/publicauth/forms.py#cl-22
замените username=self.cleaned_data['username'] на username=identity или username="%s-%s" % (provider, identity)
Джанга не позволит совсем без юзернэйма создать запись в базе, так как на неё у джанги стоит unique=True.
bitbucket.org/offline/django-publicauth/src/tip/publicauth/forms.py#cl-22
замените username=self.cleaned_data['username'] на username=identity или username="%s-%s" % (provider, identity)
Джанга не позволит совсем без юзернэйма создать запись в базе, так как на неё у джанги стоит unique=True.
save() отрабатывает при отправке формы, а надо провернуть без этого, т.е. где-то во вьюхах
Но если в двух словах то не работает. Может быть я не совсем понятно объяснил чего хочу добиться. Мне нужно что бы после того как отработал код вьюхи входа создавался профиль с любым именем, пусть даже случайным. И без лишних вопросов перекидывало на какую-нибудь страницу.
Вместо этого выводится форма, которую приходится вручную сабмитить…
Но если в двух словах то не работает. Может быть я не совсем понятно объяснил чего хочу добиться. Мне нужно что бы после того как отработал код вьюхи входа создавался профиль с любым именем, пусть даже случайным. И без лишних вопросов перекидывало на какую-нибудь страницу.
Вместо этого выводится форма, которую приходится вручную сабмитить…
Без save'а невозможно это сделать, юзера же надо создать, внести в базу так сказать. Как вы себе представляете логин/авторизацию вообще без сохранённых данных? Другое дело что второй шаг не должен показываться если полей в форме ExtraForm не существует, а просто сразу вызывать save и перекидывать человека на другую страницу уже залогениным.
После того как человек зарегистрировался, в следующие разы конечно никакие save не будут вызываться, потому что человек не дойдёт вообще до этой вьюшки, а залогинет его на этапе ранее.
Выставьте код на dumpz.org, покажите ваш файл настроек + вашу форму
После того как человек зарегистрировался, в следующие разы конечно никакие save не будут вызываться, потому что человек не дойдёт вообще до этой вьюшки, а залогинет его на этапе ранее.
Выставьте код на dumpz.org, покажите ваш файл настроек + вашу форму
Вот более менее работающий вариант, код — костыль
dumpz.org/18883/
dumpz.org/18883/
Только что специально для вас сделал проект без дополнительных полей, всё замечательно работает. Вот код pyplanet.org/static/auth_example2.tar.gz как установить этот проект я писал в статье
Незнаю как на sqlite но на mysql упирается в ограничение на имя пользователя в 30 символов, что само по себе можно преодолеть просто стрипнув конец строки идентификатора, но например для гуг эпс это оставит для всех пользователей одну и ту же строчку.
Вы абсолютно правы никакого мужежа с конструктором форм не надо было начинать, я просто немного поменял логику метода save() в кастомной форме как то так: dumpz.org/18919/
Он пытается выдернуть что может из данных если нет, то просто генерирует по типу openid_4567
Вы абсолютно правы никакого мужежа с конструктором форм не надо было начинать, я просто немного поменял логику метода save() в кастомной форме как то так: dumpz.org/18919/
Он пытается выдернуть что может из данных если нет, то просто генерирует по типу openid_4567
классное приложение, надо ещё сделать всплывающее стандартное окошко(javascript) с выбором провайдера, как в Loginza.ru. Попробую форкнуть.
У Вас не открывается страничка (http://pyplanet.org/auth/login/) в IE 7.
Данная проблема была и у меня — решилась удалением из странички повторяющей инициализации VK
Но, возникла другая проблема, в том же IE 7, — юзер не может залогинится. Окно с логином и паролем появляется, но после ввода просто закрывается без callback-a.
Может причина в этом?
>> Не следует забывать, что вызов внешних методов осуществляется при помощи механизма postMessage, а этот механизм не работает в браузерах Internet Explorer 6 и Internet Explorer 7. Конечно, в этих браузерах сработает специальный Flash-посредник, но, как бы странно это ни казалось, не у всех есть установленный Flash-плеер.
Но Flash-плеер у меня стоит в IE7.
Данная проблема была и у меня — решилась удалением из странички повторяющей инициализации VK
Но, возникла другая проблема, в том же IE 7, — юзер не может залогинится. Окно с логином и паролем появляется, но после ввода просто закрывается без callback-a.
Может причина в этом?
>> Не следует забывать, что вызов внешних методов осуществляется при помощи механизма postMessage, а этот механизм не работает в браузерах Internet Explorer 6 и Internet Explorer 7. Конечно, в этих браузерах сработает специальный Flash-посредник, но, как бы странно это ни казалось, не у всех есть установленный Flash-плеер.
Но Flash-плеер у меня стоит в IE7.
Честно говоря у меня нет IE на компьютере и нет возможности подебагить эту проблему. Что касается конкретно сайта pyplanet то поддержка IE там и не задумывалась, так как таких посетителей всего 2% и то наверняка это случайно попавшие или маскирующиеся под IE клиенты.
Но если вдруг выпадет случай проверить и решить эту проблему я обязательно отпишусь в этом топике.
Но если вдруг выпадет случай проверить и решить эту проблему я обязательно отпишусь в этом топике.
спасибо за статью. Библиотека сама по себе классная, но почему-то не получается залогиниться с помощью OpenID ЖЖ. Причем, другие openID провайдеры вроде гугла, яндекса и myopenid.com работают нормально. Обидно, и при этом непонятно. Хоть бы ЖЖ код ошибки вернул какой
Много воды утекло со времени написания статьи, автору спасибо.
Заметил недостающие звенья в самой статье (в примерах все отлично).
для правильной работы django-publicauth необходимо не только наличае django-annoying, но и также использование middleware в settings проекта:
Кстати вконтакте еще выдает VKONTAKTE_API_KEY? Мне просто ничего схожего с этим значением выдано не было, но тем не менее работает и без него.
Заметил недостающие звенья в самой статье (в примерах все отлично).
для правильной работы django-publicauth необходимо не только наличае django-annoying, но и также использование middleware в settings проекта:
MIDDLEWARE_CLASSES = (
# ...
'annoying.middlewares.RedirectMiddleware',
)
Кстати вконтакте еще выдает VKONTAKTE_API_KEY? Мне просто ничего схожего с этим значением выдано не было, но тем не менее работает и без него.
Sign up to leave a comment.
Авторизация через новый API сайта Вконтакте.ру