即使在登录Angularjs、django tastypie之后,request.user也是匿名的
我在使用Tastypie和Django登录时遇到了很大的问题 我通过AngularJSs发送我的登录请求,如下所示:即使在登录Angularjs、django tastypie之后,request.user也是匿名的,django,angularjs,tastypie,Django,Angularjs,Tastypie,我在使用Tastypie和Django登录时遇到了很大的问题 我通过AngularJSs发送我的登录请求,如下所示: var request = $http({ method: "post", url: API_URL + "api/v1/global/login/", data: {'user':$scope.login_user, 'password':$scope.pas
var request = $http({
method: "post",
url: API_URL + "api/v1/global/login/",
data: {'user':$scope.login_user, 'password':$scope.password}
});
然后在api.py中的LoginResource中,我添加了单独的函数(我的项目中的不同类型的用户):
request.user.is_authenticated()显示真值
我的api.py
中有MessageResource:
class MessagesResource(ModelResource):
login_user = fields.ForeignKey(UserResource, 'login_user', null=True, full=True)
from_person = fields.ForeignKey(UserResource, 'from_person', null=True, full=True)
to_person = fields.ForeignKey(UserResource, 'to_person', null=True, full=True)
create_user = fields.ForeignKey(UserResource, 'create_user', null=True, full=True)
update_user = fields.ForeignKey(UserResource, 'update_user', null=True, full=True)
class Meta:
allowed_methods = ['get','post','delete','put','patch']
queryset = Messages.objects.all()
resource_name = 'messages'
authorization = Authorization()
authentication = Authentication()
always_return_data = True
filtering = {
'from_person':ALL,
'to_person':ALL_WITH_RELATIONS,
'status':ALL
}
def get_object_list(self, request):
print('request.user.id=',request.user.id)
return super(MessagesResource, self).get_object_list(request).filter(to_person__id=request.user.id)
在这里,get\u object\u list request.user.id
是None。我做错了什么
注意:登录登录控制器后,我重定向到“Dashboard.html
”。。此重定向在此请求中是否有效
编辑:这是我的登录资源
class GlobalLoginResource(ModelResource):
class Meta:
queryset = User.objects.all()
allowed_methods = ['get','post']
resource_name = 'global'
authorization = DjangoAuthorization()
excludes = ['password']
如果您使用的是标准的
身份验证
,这意味着“根本没有身份验证”,则方法经过身份验证
不会检查或分配用户请求。所以userbundle.request.user
在这个特定的资源中是匿名的。我看到您已经在登录资源中注册了请求。因此,您必须在登录时使用sessionauthentication
或生成api\u密钥。并在MessageResource
中将其用作ApiKeyAuthentication
或其他
您应该了解是如何通过身份验证的
适用于每种身份验证方法的:
注意响应:重定向与此无关。因此,在添加会话身份验证后,它会阻止对显示GET 401(未经授权)的消息api的调用。。但我已经登录了,并且浏览器上存在会话。请查看编辑。我想您必须自定义AngularJS请求才能正确处理Django会话。但这是另一个问题:
class GlobalLoginResource(ModelResource):
class Meta:
queryset = User.objects.all()
allowed_methods = ['get','post']
resource_name = 'global'
authorization = DjangoAuthorization()
excludes = ['password']