AngularJS与Flask身份验证

arn*_*rts 5 flask angularjs

我正在使用AngularJS构建一个Web应用程序,并使用Flask框架构建REST-API.

该应用程序由两部分组成:

  • 用户无需登录的部分:他们可以注册,登录,查看功能......

  • 用户必须登录的部分.

为了简单起见,我想在两个角度应用程序中将这两个部分分开,让Flask根据您的登录情况将您引导到正确的应用程序.

我想知道这是否是一个好方法?我认为有了这个,我可以保持身份验证非常简单.

Mig*_*uel 10

我不确定两个独立的应用程序是个好主意.

如果你这样做,你似乎会有相当多的重复,因为我不认为这两个应用程序是互斥的.至少,我想用户登录后也可以使用公共选项,对吧?这意味着公共应用程序(客户端和服务器端)的很大一部分必须是受保护应用程序的一部分.这听起来很难维护.

还要考虑用户体验.用户必须在登录和注销时下载整个新应用程序,至少是第一次,直到它进入浏览器的缓存.根据应用程序的大小,可能需要几秒钟的等待时间.

标准方法是使用一个Angular应用程序和一个Flask应用程序.Angular应用程序开始并显示所有可用选项,并取决于用户将Angax请求发送给Flask的用户.

如果用户尝试执行需要登录的操作,则Flask将响应代码401错误.然后,Angular可以显示登录对话框以获取登录凭据,然后再次提交Ajax请求,现在使用凭据,可能作为通过安全HTTP的HTTP基本身份验证.从那时起,Angular可以将登录凭据附加到所有请求,以便用户现在可以使用所有选项.

如果您不想为每个请求发送登录信息,那么您可以get_auth_token在Flask应用程序中拥有一个端点,该端点获取凭据并将令牌发送回Angular.然后Angular可以将令牌附加到所有后续请求.

然后,Angular中的注销选项会丢弃凭据和/或令牌以再次成为未经授权的.

我在这个答案中更详细地解释了一些这些想法.尽管该问题的上下文是Node.js,但这些原则也适用于Flask.

您还可以查看我关于该主题的教程.我在服务器上使用Flask,在客户端上使用Knockout.js,但是如果你使用Angular而不是Knockout,概念应该直接翻译.以下是其中三个: