Небольшое обновление, добавил бекенд:
class AuthBackend(object):
def authenticate(self, access_token, id, add_info, **kwargs):
print 'authenticate backend'
user = None
print 'access_token='+access_token
try:
prof = qProfile.objects.get(facebook_uid=id)
user = User.objects.get(pk=prof.muser_id)
print "i've found this user and return pk"
except Exception as Error:
try:
print 'kwargs:'+str(kwargs)
print "can't get user and have this error:"+str(Error)
user = User.objects.create(email = add_info['email'])
user.first_name = add_info['first_name']
user.last_name = add_info['last_name']
user.username = add_info['username']
user.save()
new_profile = qProfile.objects.create(facebook_uid=id, muser_id=user.pk)
new_profile.token = access_token
new_profile.save()
except Exception as Error2:
print 'new profile error:'+str(Error2)
finally:
return user
print 'user:'+str(user)
def get_user(self, user_id):
try:
prof = qProfile.objects.get(facebook_uid=id)
user = User.objects.get(pk=prof.muser_id)
return user
except User.DoesNotExist:
return None
views.py:
@csrf_exempt
def UserLogin(request, backend, details, response, *args, **kwargs):
arg = {}
arg['user'] = authenticate(access_token = response['access_token'], add_info = details, id = response['id'])
print "user:='"+str(arg['user'])+"'"
request['user'] = arg['user']
try:
login(request, arg['user'])
except Exception as Error:
print 'auth failed, error:'+ str(Error)
finally:
return HttpResponseRedirect('/', arg)
Теперь данные подготовленные для работы, но есть маленькая загвоздка:
auth failed, error:'QueryDict' object has no attribute 'session'
Как я понял, сейчас сессия не работает? Вылетает на строке:
login(request, arg['user'])
во вьюхе. То есть текущий запрос не несет никакой информации о сессии, а значит она не открыта.
Вопрос: имеет ли место установить значение сессии для проверки авторизации access_token и его проверять? Будет ли это безопасным? Смогу ли я потом сделать так: взять значение сессии установленной в куки авторизованного пользователя, установить его себе и быть авторизованным в сервисе под его аккаунтом?
Updated 20 Aug. 2016, 2:37 by symstu.