Была така я же проблема. Там когда в iframe в GET параметрах передается access_token и прочее и его сразу нужно использовать чтобы авторизоваться. Немного кривовато, но нужно было очень быстро решить проблему и сильно вникать некогда было. Почему не работает по документации я так и не понял, но почитав исходники и посмотрев как открывается ифрейм написал такой код.
# settings.py
SOCIAL_AUTH_VK_OAUTH2_KEY = '1239'
SOCIAL_AUTH_VK_OAUTH2_SECRET = 'asdfdasfsdfasdfsdfsda'
SOCIAL_AUTH_VK_APP_USER_MODE = 1
# views.py
from django.contrib.auth import authenticate, login
from social.apps.django_app.utils import psa, load_strategy, load_backend
from social.exceptions import AuthTokenRevoked
def home(request):
if 'access_token' in request.GET:
backend = 'vk-oauth2'
request.social_strategy = load_strategy(request)
uri = '/'
request.backend = load_backend(request.social_strategy,
backend, uri)
token = request.GET['access_token']
try:
user = request.backend.do_auth(token)
except AuthTokenRevoked:
user = None
else:
if user:
login(request, user)
print('OK')
else:
print('ERROR')
return redirect('/')
return render(request, 'home.html')
# home.html
user: {{ request.user.get_full_name }}
<script src="//vk.com/js/api/xd_connection.js?2" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
VK.init(function() {
VK.addCallback("onApplicationAdded", requestRights);
VK.addCallback("onSettingsChanged", onSettingsChanged);
}
);
{% if not request.user.is_authenticated %}
startConnect();
{% endif %}
})
function startConnect() {
VK.callMethod('showInstallBox');
}
function requestRights() {
VK.callMethod('showSettingsBox', 1 + 2); // 1+2 is just an example
}
function onSettingsChanged(settings) {
window.location.reload()
}
</script>