【问题标题】:Firebase Check Method (iOS)Firebase 检查方法 (iOS)
【发布时间】:2014-06-14 18:34:32
【问题描述】:

我正在使用 Firebase 简单登录,它接受正确的登录,拒绝不正确的登录,然后悄悄地让我退出(不知道它是否有效)。我正在努力解决的是:当我的应用程序启动时,我需要确定用户是否仍然登录(如果他们选择“记住我”,就会发生这种情况)。如果是这样,我会继续前进,否则我会显示一个登录屏幕。

我观察到的是,如果我在整个 Firebase 上调用 unauth 函数,然后尝试使用 check 方法,返回到块的错误是 NULL 并且用户电子邮件仍然与最后登录的用户。如果我在 auth 对象上使用 logout 方法,也会发生同样的情况。

这是一个 RubyMotion 应用程序,所以我可以在 REPL 中使用它,看看发生了什么。

更新:我正在添加代码,以便遇到此问题的任何其他人都可以看到发生了什么。事实证明,这在 motion-firebase 中是一种特质。我将为此提交修复程序。同时,这是我的代码:

设置代码:

def init_firebase
  @fire_ref = Firebase.new('https://my-fine-firebase.firebaseio.com')
  @auth = FirebaseSimpleLogin.new(@fire_ref)
end

def login(email, password, &block)
  status = MotionMap::Map.new({error: 'success', user: nil})

  @auth.login(email: email, password: password) { |error, user|
    status.user = user

    if error.nil?
      if user.nil?
        status.error = "no error but user is nil"
      end
      block.call(status)
    else
      status.error = error.localizedDescription
      block.call(status)
    end

  }
end

所以调用我的登录方法会响应 Firebase 回调,完成后,它会依次在我的 Ruby 代码中执行一个闭包。这一切都有效。 MotionMap 的东西只是一个很好的方法来获得无差别访问的哈希值。

现在,在 REPL 中我可以这样做:

(main)> error = nil
(main)> f.unauth{|e| error = e}
(main)> p error
nil

(main)> error = user = nil;
(main)> a.check{|e, u| error = e; user = u}
(main)> p error
=> nil
(main)> puts user.email
=> 'my_real_email_address'

所以我做的第一件事就是取消授权这个特定的 Firebase 引用,对吗?然后,我继续检查。错误为 nil(Objective-C 中为 NULL),但用户信息完好无损。换句话说,我无法判断我的用户未经授权。

更新:在 Firebase 对象上调用 unauth 似乎不会影响 check 查看登录状态的方式。我对motion-firebase中的注销方法做了一个简单的修复,似乎在auth对象上调用logout方法实际上清除了该对象中的信息并在Firebase对象上调用unauth。这只是我从观察正在发生的事情中得出的结论。

需要注意的是,调用check(映射到(void)checkAuthStatusWithBlock:(void ( ^ ) ( NSError *error , FAUser *user ))block)是异步运行的,完成后调用块,出现nil错误和完全为空的用户。

nil 错误是预期的行为吗?

【问题讨论】:

    标签: ios firebase firebasesimplelogin


    【解决方案1】:

    请随意发布一些您遇到问题的确切代码以获得更准确的答案。

    Firebase 使用回调来确定用户所处的状态。根据您为 FireBase 使用的 ruby​​ 包装器,实现可能会有所不同。 Firebase 通常为您提供三个选项:Success(如果用户已经通过身份验证或刚刚成功通过身份验证)、Error(出现问题)和 Else(用户未登录)。在每个回调中,您都可以指定要执行的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      相关资源
      最近更新 更多