0

我的测试项目中有一个 Django-social-auth。我需要进行身份验证抛出“vkontakte”(它是俄罗斯流行的社交网络)。文档。所以,在/etc/hosts我有:

#127.0.0.1  localhost
127.0.1.1   pc-my-motherboard
127.0.0.1   domain.com

我将social_auth添加到已安装的应用程序中,这是设置中的一些代码:

VK_APP_ID = '123456'
VK_API_SECRET = 'secrets :)'
VK_EXTRA_SCOPE = ['notify', 'friends', 'status', 'groups', 'notifications']


# Добавляем в AUTHENTICATION_BACKENDS нужные бекенды
AUTHENTICATION_BACKENDS = (
    'social_auth.backends.contrib.vkontakte.VKontakteOAuth2Backend',
    'django.contrib.auth.backends.ModelBackend',
)

# Добавляем в TEMPLATE_CONTEXT_PROCESSORS процессор "social_auth_by_name_backends"
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'social_auth.context_processors.social_auth_by_name_backends',
    'social_auth.context_processors.social_auth_backends',
    'social_auth.context_processors.social_auth_by_type_backends',
    'social_auth.context_processors.social_auth_login_redirect',
)

# Если имя не удалось получить, то можно его сгенерировать
SOCIAL_AUTH_DEFAULT_USERNAME = lambda: random.choice(['0', '1', '2', '3', '4', '5'])

# Разрешаем создавать пользователей через social_auth
SOCIAL_AUTH_CREATE_USERS = True

# Перечислим pipeline, которые последовательно буду обрабатывать респонс 
SOCIAL_AUTH_PIPELINE = (
    # Получает по backend и uid инстансы social_user и user
    'social_auth.backends.pipeline.social.social_auth_user',
    # Получает по user.email инстанс пользователя и заменяет собой тот, который получили выше.
    # Кстати, email выдает только Facebook и GitHub, а Vkontakte и Twitter не выдают
    #'social_auth.backends.pipeline.associate.associate_by_email',
    # Пытается собрать правильный username, на основе уже имеющихся данных
    'social_auth.backends.pipeline.user.get_username',
    # Создает нового пользователя, если такого еще нет
    'social_auth.backends.pipeline.user.create_user',
    # Пытается связать аккаунты
    'social_auth.backends.pipeline.social.associate_user',
    # Получает и обновляет social_user.extra_data
    'social_auth.backends.pipeline.social.load_extra_data',
    # Обновляет инстанс user дополнительными данными с бекенда
    'social_auth.backends.pipeline.user.update_user_details'
)

SOCIAL_AUTH_UID_LENGTH = 223
SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = 18
SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = 18
SOCIAL_AUTH_ASSOCIATION_HANDLE_LENGTH = 223
SOCIAL_AUTH_UUID_LENGTH = 16

网址中:

urlpatterns = patterns('',
    url(r'$', 'myapp.views.index', name='index'),
    url(r'', include('social_auth.urls')),

)

index.html中:

<p>Hello {{ user }}</p>

<a href="{% url 'socialauth_begin' 'vkontakte-oauth2' %}">Enter VK</a>

然后我启动服务器:sudo python manage.py runserver 127.0.0.1:80。我看到链接,我按下它,它转到http://domain.com/login/vkontakte-oauth2/. 上次这个节目认证形式的社交网络,并重定向到我的网站,现在它没有发生。这很奇怪,因为所有设置都是真的,请帮我修复它。

谢谢。

4

2 回答 2

0

当您尝试访问表单时,您能否准确说明发生了什么?你看到一个特定的错误吗?当我尝试在 django-social-auth演示中访问此社交网络的表单时,出现错误。可能是有关 vkontakte 的应用程序部分被窃听,似乎用于重定向的域名是错误的。您可以检查您尝试访问的网址是否与通常用于登录社交网络的网址相对应。

问候。

于 2013-04-01T17:09:46.370 回答
0

哦,错误url(r'^$',urls中。只有铁杆

于 2013-04-01T17:53:54.803 回答