首页 文章

Firebase检查方法(iOS)

提问于
浏览
0

我正在使用Firebase简单登录,它接受正确的登录,拒绝不正确的登录,并安静地让我退出(不知道它是否有效) . 我正在努力的是:当我的应用程序启动时,我需要弄清楚用户是否仍然登录(如果他们选择“记住我”,就会发生这种情况) . 如果是这样,我会一直向前移动,否则我会出现一个登录屏幕 .

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

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

更新:我正在添加代码,所以其他任何人都可以看到正在发生的事情 . 事实证明,这在运动火力基础上是一种特质 . 我将提交一份修正案 . 与此同时,这是我的代码:

设置代码:

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中的logout方法做了一个简单的修复,看来在auth对象上调用 logout 方法实际上清除了该对象中的信息,并在Firebase对象上调用 unauth . 这只是我从观察正在发生的事情中扣除的 .

应该注意的是,调用 check (映射到 (void)checkAuthStatusWithBlock:(void ( ^ ) ( NSError *error , FAUser *user ))block )以异步方式运行,并在完成时调用该块,并出现 nil 错误和完全空的用户 .

nil 错误是预期的行为吗?

1 回答

  • 0

    随意发布您遇到问题的确切代码,以获得更准确的答案 .

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

相关问题