2012-09-19 2 views
10

私はリングセッションラッパーを使用して現在のユーザーに関連付けられたOAuthトークンを格納するコンポジットアプリケーションを持っています。サーバーが再起動したときにこのトークンを利用可能にしておきたいので、毎回認証プロセスを経る必要はありません。Compojure/Ring:なぜ、クッキーストアを使用したセッションはサーバーの再起動時に存続しませんか?

私は、デフォルトのメモリストアの代わりにクッキーストアを使用すると助けになると思っていましたが、そうはなりません。私は何が欠けていますか?

これは、コードの関連部分である:

(defn auth-callback-handler 
    [session {code :code}] 
    (let [token (retrieve-token code)] 
    (-> (redirect "/") (assoc :session (assoc session :token token))))) 

(defroutes app-routes 
    (GET "/" {session :session} (root-handler session)) 
    (GET "/auth-callback" {session :session params :params} (auth-callback-handler session params)) 
    (route/not-found "Not Found")) 

(def app 
    (-> (handler/site app-routes) 
     (wrap-session {:store (cookie-store {:key "a 16-byte secret"})}))) 

機能root-handlerは、誰かがログインされているかどうかを判断するためにトークンを使用していますが、セッション情報の仕方には何も返しません。

答えて

11

ハンドラー/サイトには、アプリケーションにラップセッションミドルウェアがあることが問題です。これにより、暗号化/復号化が2回実行されます。 compojureセッション・ハンドルの使用を設定するには:

(def app 
    (site app-routes {:session {:store (cookie-store {:key "a 16-byte secret"})}})) 

また、おそらくあなたは、リングセッションストアプロトコルを実装し、これらのプロジェクトのいくつかに興味がある:

https://github.com/sritchie/couch-session

https://github.com/wuzhe/clj-redis-session

https://github.com/rmarianski/servlet-session-store

最後のものを永続化するには、c選択したサーブレット・コンテナの文書を読んでください。

関連する問題