/
authentication.cljs
46 lines (37 loc) · 1019 Bytes
/
authentication.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(ns firemore.authentication
(:require
[cljs.core.async :as async]
[firemore.firebase :as firebase]
[firemore.config :as config])
(:require-macros
[cljs.core.async.macros :refer [go-loop go]]))
(enable-console-print!)
(def FB firebase/FB)
(def signing-in? (atom false))
(def user-atom (atom nil))
(defn user-change-handler [js-user]
(when js-user
(reset!
user-atom
{:anonymous? (.-isAnonymous js-user)
:uid (.-uid js-user)})))
(-> FB firebase/auth (.onAuthStateChanged user-change-handler))
(defn login-anonymously!
([] (login-anonymously! FB))
([fb]
(when-not @signing-in?
(.signInAnonymously (firebase/auth fb))
(reset! signing-in? true))))
(defn logout!
([] (logout! FB))
([fb] (.signOut (firebase/auth fb))))
(defn uid []
(let [c (async/chan)]
(go-loop []
(if-let [uid (:uid @user-atom)]
(async/put! c uid)
(do
(login-anonymously!)
(async/<! (async/timeout 1000))
(recur))))
c))