Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Jquery Tastypie不发送cookie_Jquery_Ajax_Django_Tastypie - Fatal编程技术网

Jquery Tastypie不发送cookie

Jquery Tastypie不发送cookie,jquery,ajax,django,tastypie,Jquery,Ajax,Django,Tastypie,我正在使用Tastypie制作我的API。我正在使用以下功能登录 def signin(self, request, **kwargs): self.method_check(request, allowed=['post']) data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json')) use

我正在使用Tastypie制作我的API。我正在使用以下功能登录

def signin(self, request, **kwargs):
        self.method_check(request, allowed=['post'])
        data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))
        username = data.get('username', '')
        password = data.get('password', '')
        try:
            user = User.objects.get(username=data.get('username', ''))
            if user.get_profile().status == 3 or user.get_profile().status == 4:
                return self.create_response(request, {'success': False, 'reason': 'Account Disabled or Closed' })
            user = authenticate(username=username, password=password)
            if user:
                if user.get_profile().status == 2:
                    return self.create_response(request, {'success': True,'is_verified':False })
                return self.create_response(request, {'success': True,'is_verified':True })
            else:
                return self.create_response(request, {'success': False, 'reason': 'Wrong Email or Password' })
        except User.DoesNotExist:
            return self.create_response(request, { 'success': False, 'reason':'Email not registered' })
但是当我使用jQuery登录时

<script type="text/javascript">
            $(document).ready(function() {
                $( "#signin" ).click(function() {
                    var username=$("#inputEmail1").val();
                    var password=$("#inputPassword1").val();
                    if (username.length == 0 || password.length == 0) {
                        alert('enter email and password to login.')
                    }else{
                        $.ajax({
                            type: "POST",
                            url: "/api/v1/user/signin/",
                            data: JSON.stringify({ 'username':username,'password':password }),
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function(data, status, xhr){
                                $.cookie();
                                if (data.success){
                                    if (data.is_verified) {
                                        alert('Logged in and is_verified');
                                    }else{
                                        alert('Logged in but not verified');
                                    }
                                }else{
                                    alert('Incorrect username or password');
                                }
                            },
                            failure: function(errMsg) {
                                alert(errMsg);
                            }
                        });
                    };
                });
            })
        </script>

$(文档).ready(函数(){
$(“#登录”)。单击(函数(){
var username=$(“#inputEmail1”).val();
var password=$(“#inputPassword1”).val();
如果(username.length==0 | | password.length==0){
警报('输入登录的电子邮件和密码')
}否则{
$.ajax({
类型:“POST”,
url:“/api/v1/user/signin/”,
数据:JSON.stringify({'username':username,'password':password}),
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据、状态、xhr){
$.cookie();
if(data.success){
if(数据是否经过验证){
警报(“已登录并已验证”);
}否则{
警报(“已登录但未验证”);
}
}否则{
警报(“用户名或密码不正确”);
}
},
失败:函数(errMsg){
警报(errMsg);
}
});
};
});
})
但是当我试图用$.cookie()取我的cookie时;在firebug中(使用),但它返回一个空对象(对象{})


我错过什么了吗?我应该加些什么吗?这在iOS上运行得很好。它以某种方式获取cookie并记住会话。但是不在这里。

您的
登录方法没有设置任何cookie,因此jQuery无法访问cookie。我不知道这在iOS上是如何工作的(另一个会话/手动登录的剩余cookie?),但除非在嗅探到iOS的流量时可以看到设置的cookie头,否则问题在于
signin

要在Django中设置会话cookie,需要将要保存的值添加到
请求中。会话

request.session['success'] = true
return self.create_response(request, {'success': True,'is_verified':False })

顺便说一句,此代码中还存在信息泄露漏洞,因为它允许攻击者确定用户名在系统上是否有效。通常情况下,
登录
函数应返回相同的错误(在同一时间)以获取无效的用户名或密码。

您是否查看了firebug中的响应?你能看到设置的Cookie响应头吗?@TommasoBarbugli不,我看不到。关于该漏洞,你完全正确。我修好了。但事实证明我在做另一件蠢事。我没有登录用户,只是验证了他们的身份。我也应该登录(请求、用户)。在这之后,一切都很顺利,我假设
登录(请求,用户)
是一个设置会话cookie的函数。因此,是的,这将解决问题。