python social auth:请求不包括会话和元字段
这个例子来自不同的资源。我使用django 1.9,但此代码失败,因为“GET”不存在,我重写此函数如下:python social auth:请求不包括会话和元字段,python,django,session,metadata,python-social-auth,Python,Django,Session,Metadata,Python Social Auth,这个例子来自不同的资源。我使用django 1.9,但此代码失败,因为“GET”不存在,我重写此函数如下: def register_by_access_token(request, backend): # This view expects an access_token GET parameter, if it's needed, # request.backend and request.strategy will be loaded with the current
def register_by_access_token(request, backend):
# This view expects an access_token GET parameter, if it's needed,
# request.backend and request.strategy will be loaded with the current
# backend and strategy.
token = request.GET.get('access_token')
user = backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
@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'])
request.session = SessionStore()
request.session.time = response['access_token']
request.session.save()
raise sdfds
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)
因此,我有一个重定向循环,服务器返回http错误,重定向太多
毕竟,我尝试编写自己的后端:
def UserLogin(request, backend, details, response, *args, **kwargs):
# This view expects an access_token GET parameter, if it's needed,
# request.backend and request.strategy will be loaded with the current
# backend and strategy.
token = response['access_token']
user = backend.do_auth(token)
arg = {}
arg['user'] = user
if user:
login(request, user)
return HttpResponseRedirect('/', arg)
这是一种观点:
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
重新结果:“QueryDict”对象没有属性“session”
我在setting.py中将UserLogin添加到管道的末尾
现在我有这个:
@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)
但是现在:“QueryDict”对象没有属性“META”
有几天我无法设置此s。。也许我做错了什么
解决方案:我们必须使用strategy.request访问django请求其他人遇到这个问题时,请参阅github上的这个问题:。使用
策略。request
提供请求对象。策略
将自动传递到您的管道
像这样使用它:
def register_by_access_token(request, backend):
# This view expects an access_token GET parameter, if it's needed,
# request.backend and request.strategy will be loaded with the current
# backend and strategy.
token = request.GET.get('access_token')
user = backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
@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'])
request.session = SessionStore()
request.session.time = response['access_token']
request.session.save()
raise sdfds
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)
对于其他遇到此问题的人,请参阅github上的此问题:。使用
策略。request
提供请求对象。策略
将自动传递到您的管道
像这样使用它:
def register_by_access_token(request, backend):
# This view expects an access_token GET parameter, if it's needed,
# request.backend and request.strategy will be loaded with the current
# backend and strategy.
token = request.GET.get('access_token')
user = backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
@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'])
request.session = SessionStore()
request.session.time = response['access_token']
request.session.save()
raise sdfds
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)
无法理解:回溯中的请求信息包括我需要的所有信息,包括META和sessionid。所以它的管道没有返回给我任何信息?我得到了类似的问题:。请求中不存在会话和用户。你知道为什么吗?也许我们可以用信号来解决这个问题,比如“auth:complete”,但我在python social auth中没有看到任何信号。现在我正在寻找psa和部分装饰器,我们必须使用strategy.request访问django请求。现在我试着完成它@Мааааааааааааааааааа。所以它的管道没有返回给我任何信息?我得到了类似的问题:。请求中不存在会话和用户。你知道为什么吗?也许我们可以用信号来解决这个问题,比如“auth:complete”,但我在python social auth中没有看到任何信号。现在我正在寻找psa和部分装饰器,我们必须使用strategy.request访问django请求。现在我试着完成它@Маааааааааааааа?