Skip to content

Instantly share code, notes, and snippets.

@burn2delete
Created February 9, 2017 04:59
Show Gist options
  • Save burn2delete/9ff0d106f8d85e9b4a321861674153b4 to your computer and use it in GitHub Desktop.
Save burn2delete/9ff0d106f8d85e9b4a321861674153b4 to your computer and use it in GitHub Desktop.
CLJS/Feathers.js Client
(ns app.client
(:require [cljsjs.socket-io]
[goog.object :as obj]
[feathers.client :as feathers]
[feathers.client.services :as svc]))
;; Feathers Client ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def app (feathers/feathers))
(-> app
(feathers/socketio (js/io))
(feathers/hooks)
(feathers/authentication #js{:storage (obj/get js/window "localStorage")}))
(def users (feathers/service app "users"))
;; Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- verifyToken [res]
(let [passport (obj/get app "passport")
token (:accessToken (js->clj res :keywordize-keys true))]
(.verifyJWT passport token)))
(defn- decodePayload [payload]
(let [uid (:userId (js->clj payload :keywordize-keys true))
user (-> app (feathers/service "users") (svc/get uid))]
user))
(defn- setUser [user]
(let [udat (js->clj user :keywordize-keys true)]
(obj/set app "user" user)
user))
;; Client API ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn signup! [email password]
(svc/create users #js{:email email :password password}))
(defn login! [email password]
(-> app
(feathers/authenticate (clj->js {:strategy "local" :email email :password password}))
(.then verifyToken)
(.then decodePayload)
(.then setUser)))
(defn logout! []
(feathers/logout app))
(defn auth! []
(-> app
(feathers/authenticate)
(.then verifyToken)
(.then decodePayload)
(.then setUser)
(.catch #(.warn js/console (obj/get % "message")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment