【问题标题】:Firebase, OAuth, ElmFirebase、OAuth、榆树
【发布时间】:2018-04-17 20:28:58
【问题描述】:

我正在尝试使用 Elm 实现简单的投票工具 SPA。 我想为此使用 Firebase。 我找到了 Elm 如何与 Firebase 一起使用的几个选项:

  1. 一些 Elm 包,但它们使用的是本机绑定。
  2. Elm 使用端口与 JS 对话。
  3. Elm 使用 REST API。

我选择了选项 3,它对我有用,但只对我有用。我希望其他用户也可以访问此应用程序。 我已启用 google 作为身份验证提供程序,我的实时数据库的规则是:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

我是 Firebase 项目的所有者,这个 Elm 应用为我工作,我可以看到 GET 的结果,我什至可以发送 PATCH 进行投票。

但是,如上所述,没有其他人可以通过我的应用程序和 REST 访问数据。第一个 GET 请求返回未经授权的访问,但我可以看到新用户在 Firebase 控制台中登录/注册。

我的应用程序使用我的 API 密钥并获取访问令牌,然后将访问令牌附加到 REST 请求(我尝试了两种方法:授权、承载标头和 ?access_token=)。 我已经多次阅读 Firebase 示例和文档,但仍然缺少一些东西。

是否可以按照我想要的方式设计这个应用程序? 要授权其他用户的 REST 请求,还需要做什么?

【问题讨论】:

  • 我想不出其他用户会被拒绝访问的任何特殊原因。如果您希望我们帮助调试,您需要发布一些代码。
  • 您可以将“$uid”变量放在您的规则中 - 它代表当前登录用户的 id。使用它,您可以在数据库中创建特定用户可读的部分。您可以在firebase.google.com/docs/database/security 阅读更多内容

标签: firebase oauth-2.0 google-api firebase-authentication elm


【解决方案1】:

就像我在问题中所说的那样,我错过了一些东西。 在 Slack 上 Elm 社区的大力帮助下,我终于明白了缺失的部分。 此页面:https://firebase.google.com/docs/database/rest/auth 提到了两种类型的身份验证。

  1. Google OAuth2 访问令牌
  2. Firebase ID 令牌

我使用了选项 1,但我应该将选项 2 用于我的简单 SPA。 使用 Firebase SDK 很容易获取令牌

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {

必须附加到发送到 Firebase 上的实时数据库的每个 HTTP 请求。此类令牌应放在查询 ?auth=

使用此令牌,其他用户可以访问我的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多