Django 使用angularjs资源和RESTApi创建登录的正确方法

Django 使用angularjs资源和RESTApi创建登录的正确方法,django,angularjs,tastypie,Django,Angularjs,Tastypie,我使用Django Tastypie来构建我的api,我正在以正确的方式创建一个登录表单,这样用户就可以登录到应用程序中,现在我要做的是发送一个GET请求,并使用他在表单中提交的用户名/密码作为过滤选项,但我很确定这根本不安全。如何使用POST请求执行相同的操作 当我用firebug打开控制台时: 获取URL/app/api/v1/user/?email=user&password=PASS Api认证和内容类型位于标题上。您可以使用模块发布数据 只要做: 始终通过https发送身份验证数据,否

我使用Django Tastypie来构建我的api,我正在以正确的方式创建一个登录表单,这样用户就可以登录到应用程序中,现在我要做的是发送一个GET请求,并使用他在表单中提交的用户名/密码作为过滤选项,但我很确定这根本不安全。如何使用POST请求执行相同的操作

当我用firebug打开控制台时:

获取URL/app/api/v1/user/?email=user&password=PASS


Api认证和内容类型位于标题上。

您可以使用模块发布数据 只要做:

始终通过https发送身份验证数据,否则您的密码将以明文形式发送。

@leosilvano

不要使用angular js处理用户身份验证和授权,这不是不可能的,只是它不太安全,而且当Django提供远比这简单的东西时,实现也需要一些努力

我碰巧使用了django+angularjs+tastypi(restapi)。如果你愿意,看看我的实施方式

将angularJs的index.html包含在模板(Django模板)中,并将指令、控制器、js、css等放在静态文件夹(Django static)中。在身份验证过程之后进行API调用。这将无缝地工作,您也将遇到较少的问题

原因:

  • 在使用模板注册和登录时,user_auth模型变得非常方便,您无需费劲编写自己的身份验证,我相信在使用Angular Js login auth实现时,您必须这样做
  • 如果需要检查用户是否已登录,则可以使用类似于视图的装饰器,比如说“profile”,执行以下操作
  • 通过“GET”传递密码是错误的。。通过“POST”传递auth值并通过JSON获取。。这也不是一个好主意。因为你很容易受到中间人的攻击

  • 记住,当使用Angularjs登录时,您必须对CORS请求采取措施,因为任何人都可以查看json响应,并且他们将能够重现相同的结构。使用Django模板时,实现Perm mixin和group要容易得多

  • 处理404之类的异常,或者只处理post请求,从而将用户带到自定义页面(重定向之类的操作)变得很困难。我知道SPA的,但如果碰巧有重定向。。在我的情况下,我需要重定向到另一个站点。下面显示了如何简单地实现它,包括http状态

  • 解决方案:

  • 登录后使用Angular Js和REST(Tastypie)交互。使用Django模板进行登录授权。使用django模块。。这节省了很多时间

  • 如果仍要使用REST API登录。。邮寄到django。。请看下面的帖子


  • OP使用
    $resource
    ,它可能看起来像:
    User.$save()
    。我想我可以使用$http进行登录,其余部分使用$resource。api和前端将位于不同的服务器中,忘了提到这一点,这就是为什么我尝试只使用angularJS构建安全登录的原因。我也已经对CORS采取了一些措施。。我将研究第二个解决方案。我测试了它,它工作了,但需要做一些修改。恐怕我还不能投票。
        $http.post(url, data)
    
    
    
        @login_required(login_url='/login/')
        def profile(request):
            return render_to_response('profile.html')
    
    
    
    
        if request.method != 'POST':
                return HttpResponseNotFound(render_to_response('404.html', { 'message' : 'Only POST Requests are allowed for authentication process.', 'baseurl' :request.build_absolute_uri('/').rstrip('/')}))