混合Django应用程序-REST API身份验证

时间:2020-08-31 09:51:42

标签: javascript python django authentication django-rest-framework

我是Django的新手,并且已构建了一个基本应用程序(Django 3.1),该应用程序使用会话身份验证和简单的登录页面(用户名+密码)登录django用户。它工作正常。我想在登录用户可访问的页面上使用javascript(vue.js)来调用托管在同一Django应用程序上的Django REST API。

尽管进行了大量的谷歌搜索,但似乎没有人给出一个清晰的混合Django应用程序的身份验证示例,该应用程序增加了API。我之前使用过许多API,因此熟悉身份验证选项。 我的问题是如何以安全的方式获取django模板加载的javascript的凭据。

理想情况是:

  1. 用户使用用户名/密码登录
  2. django重定向到PAGE B,自动完成,将用户的令牌插入cookie / sessionStorage
  3. PAGE B上的javascript函数从cookie / sessionStorage获取凭据并调用API(使用django-rest-framework支持的所有各种选项)

我的问题:

在我的do_login视图函数(如下)中的

问题1 ==>中,使用Django内置的 login 方法成功进行身份验证之后,我是否需要在HttpResponse中创建cookie(例如token = XXXXXXX),所以javascript可以访问吗?这样安全吗?

    def do_login(request):
       ....
       login(request, user)
       ...
       #create token here and return to user somehow in cookie/sessionStorage
       return render(request, 'hello/logged_in_ok.html')

所以我的javascript可以做到类似的操作(仅限演示代码):

function onButtonClick(){
    let token = sesssionStorage.getItem("django_gave_me_this_token");
    let response = callGetAPISomehow(token, "https://demo/rest/api/account/1")
    .....
}

问题2 ==>大多数视图方法的结尾:

    return render(request, 'blah/blah.html', {'data': blah})

如何以这种方式在响应中设置Cookie?没有要访问的响应对象。

感谢所有帮助

0 个答案:

没有答案