I'll answer my own question here for future reference value.
I found a much cleaner way was to create a wrapper type (deftype) for the
ring session store impl. It is a simple delegating wrapper but it sees the
correct cookies, regardless of the servlet container.
It has the disadvantage of not having access to the ring request so
recording user-agent etc is not possible. I solved this by using middleware
to record that in a subsequent request.
Here's what the wrapper looks like, feedback is welcome if you have it...
(deftype SessionStoreWrapper [store]
rss/SessionStore
(read-session [_ session-key]
(rss/read-session store session-key))
(write-session [_ session-key data]
(let [key-written (rss/write-session store session-key data)]
;; ::session-recorded means middleware below has upserted user-agent,
ip-address etc
(when (and (not (::session-attributes-recorded data)) (
:cemerick.friend/identity data))
(let [current-auth (get-in data [:cemerick.friend/identity :current]
)
user-id (get-in data [:cemerick.friend/identity
:authentications current-auth :id])]
(debug "upserting session: " key-written " -> " user-id)
(try
(session/upsert-session user-id key-written nil nil :logged-in)
(catch Throwable t
(error t "record login failed")))))
key-written))
(delete-session [_ session-key]
(debug "logging out: " session-key)
(try
(session/logout-session session-key)
(catch Throwable t
(error t "record logout failed")))
(rss/delete-session store session-key)))
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.