2017-02-03 53 views
0

一直在阅读和观看,并且询问了很多关于ReactJS和Django的问题。ReactJS和Django之间的安全认证

这特别有助于我理解从Django REST框架到ReactJS以及从ReactJS到Django REST框架的数据流。

Django Forms and Authentication with Front-end Framework (AngularJS/ReactJS)

然而,有一两件事我想了解的是身份验证Django的REST框架。我从文档中了解到它内置了认证功能。由于这是敏感数据,我显然希望受保护的人只需前往http://www.my_site.com/info/api即可找回。

我需要设置ReactJS是唯一可以从API请求数据,无论是通过密钥还是用户名/密码凭据。我只是好奇这是如何处理的?显然,我不希望在ReactJS中硬编码,因为它会与其余的ReactJS一起编译。

+0

你的反应应用程序和你的Django应用程序在同一台服务器上吗?如果他们是你可以关闭CORS。如果他们在不同的服务器上,只允许CORS访问您的React应用程序的域 – Bezzi

+0

是的,更正它们位于同一台服务器上。我不得不阅读CORS,因为我不熟悉它。 – sockpuppet

回答

2

下面是我如何处理它:我会使用JSON Web Token (JWT)进行身份验证和授权。

你会用你的后端保护ALL API请求从无效智威汤逊的除了的路线,其中用户将不会有一个令牌(即注册/登录页)。

这里的应用程序的流程怎么会去:

  1. 新用户注册与标准的凭证,如电子邮件和密码,您的应用程序。
  2. 您的后端将创建一个新用户,签署新的JWT令牌(通常使用用户的ID)。您可能会使用第三方库来签署/验证令牌(我没有Django社区的经验,但我确信快速的Google搜索将为您提供答案)。你的后端将发回这个令牌。这是后端接收电子邮件,密码或任何其他注册时的敏感信息的唯一时间。
  3. 从此刻起React将只使用此令牌进行授权。 React会将此令牌保存在某处(例如,localStorage),并将此令牌与请求的其他部分一起发送到您在后端创建的API路由。您将在请求中的authorization标头中发送此令牌。
  4. 您的后端将使用第三方库验证此令牌。如果无效,则请求停止并返回未经授权的错误。如果有效,请求继续。

这实现了以下内容:

  1. 你的API路线对未经授权的用户
  2. 每个请求您的API为授权用户验证其免受请求您的API的任何一部分人的保护。
  3. 您只需允许用户修改自己的数据就可以进一步巩固这一点。例如,保护Suzy的个人资料免受她自己以外的人的修改,只允许她的令牌和她的ID修改她的账户/数据。

重要注意事项 - 您的后端永远不会将这些标记保存在存储中。它会验证每个请求上的令牌。详细了解JSON Web Tokens (JWT)以及它的工作原理。