私は Firebase Simple Login を使用しており、適切なログインを受け入れ、間違ったログインを拒否し、静かにログアウトさせてくれます (うまくいったかどうかはわかりません)。私が取り組んでいるのは次のとおりです。アプリの起動時に、ユーザーがまだログインしているかどうかを確認する必要があります (これは、ユーザーが "remember me" を選択した場合に発生します)。そうである場合はそのまま進み、そうでない場合はログイン画面を表示します。
私が観察しているunauth
のは、Firebase 全体で関数を呼び出してからcheck
メソッドを使用しようとすると、ブロックに返されるエラーは NULL であり、ユーザーの電子メールは最後にログインしたユーザーと同じままであるということです。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 参照の承認を取り消すことでしたよね? そして、先に進んでチェックを行いました。エラーはゼロ (Objective-C では NULL) でしたが、ユーザー情報はそのままでした。つまり、自分のユーザーが無許可であったとは言えません。
更新: unauth
Firebase オブジェクトを呼び出してもcheck
、ログイン状態を確認する方法には影響しないようです。motion-firebase の logout メソッドで簡単な修正を行いましたがlogout
、auth オブジェクトでメソッドを呼び出すと、実際にはそのオブジェクトの情報がクリアunauth
され、Firebase オブジェクトが呼び出されるようです。これは、何が起こっているかを見てからの私の推論です。
呼び出しcheck
( にマップされる(void)checkAuthStatusWithBlock:(void ( ^ ) ( NSError *error , FAUser *user ))block
) は非同期で実行され、完了時にブロックが呼び出され、nil
エラーが発生し、ユーザーが完全に空になることに注意してください。
nil
エラーは予期された動作ですか?