Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python social auth:请求不包括会话和元字段_Python_Django_Session_Metadata_Python Social Auth - Fatal编程技术网

python social auth:请求不包括会话和元字段

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

这个例子来自不同的资源。我使用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
    # 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请求。现在我试着完成它@Маааааааааааааа?