【问题标题】:Design: Google OAuth using AngularJS and Flask设计:使用 AngularJS 和 Flask 的 Google OAuth
【发布时间】:2016-10-19 21:19:34
【问题描述】:

我正在使用前端的 AngularJS 和服务器端的带有 Flask 的 Python 构建一个 Web 应用程序。我正在尝试按照google developers site 上的文档实现 OpenID/OAuth 登录功能。我首先构建服务器端代码(使用 Postman 测试时一切正常),然后开始在前端工作。现在,我有一种感觉,我添加此功能所遵循的设计非常糟糕。以下是我面临的问题:

按照 Google OAuth 文档,我设置了我的服务器端流程,有点像这样:

gAuth: 这是我的 Flask 应用程序中的一个函数,当用户单击 Google 登录按钮时,它将由来自 Angular 的 GET 请求调用。

它向 Google 授权端点发送 GET 请求以获取授权码。对此请求的响应有一个文本字段,其中包含一个显示 google 登录页面的 HTML 代码。我将其返回给 Angular(因为这是调用此函数的地方)。然后 Angular 将其呈现在浏览器上,供用户输入凭据。一旦用户输入凭据并授权我的应用程序,Google 就会使用 GET 请求将身份验证代码发送到我的应用程序 requestToken 中的另一个函数,因为那是我用于 Google OAuth 的 redirect_URI。在这一点上,我完全脱离了 Angular。现在 requestToken 使用身份验证码向 Google 的令牌端点发送 POST 请求,以便将其交换为 id_token。现在 requestToken 有了 id_token 并做了它应该做的事情。

我从 requestToken 函数返回一个值“1”,但这会转到 Google 代码,因为这是对 requestToken 的请求的来源。

现在,问题是如何让前端知道 OAuth 一切正常,并且用户必须被重定向到主页。我希望 requestToken 的返回值转到 Angular。我想问这是否可能,但我的常识告诉我这是不可能的。但是,我想知道是否有一种方法可以将请求从 Flask 发送到 Angular。非常感谢任何帮助。

【问题讨论】:

    标签: javascript python angularjs google-app-engine oauth


    【解决方案1】:

    我放弃了手动实施。有一个现成的库:Satellizer 以及服务器实现(对于 Python 示例,请参阅文档)。

    【讨论】:

      【解决方案2】:

      使用Firebase Authentication tutorial for App Engine Python。它使用 Flask 后端。前端逻辑非常基本,但它应该提供您正在寻找的内容,并且具有允许您一次简单地连接多个身份验证提供程序的好处。

      【讨论】:

        【解决方案3】:

        所以...我找到了解决此问题的方法。成功认证后,用户必须被重定向到主页。因此,无需将响应发送到前端,我只需从 Flask 本身重定向到主页的 url。如果身份验证失败,用户将被重定向到错误页面,该页面显示错误消息并链接到登录页面。到目前为止,这对我有用。

        无论如何,感谢您的回复。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-21
          • 2013-07-03
          • 1970-01-01
          • 2018-06-15
          • 2014-12-13
          • 2012-12-06
          • 2019-12-16
          • 2014-10-29
          相关资源
          最近更新 更多