YesodのMiddleware
DjangoのMiddlewareとか、SpringFrameworkのfilterみたいなもんの、Yesodのやつ、前処理をフックするための機能、コードはgithubに置いときます。
Yesod Middleware sample
認証されたユーザーのログを出力するという簡単なサンプルです。
動かしてみる
手順どおりに初期化できたら、ユーザーを作成する
作成すればログインされるので、適当なリンクをアクセスしてみる
ログを確認
mysql> select * from acc_log; +----+---------+---------------------+ | id | user_id | acc_time | +----+---------+---------------------+ | 1 | 1 | 2017-08-11 20:55:32 | | 2 | 1 | 2017-08-11 20:56:00 | +----+---------+---------------------+ 2 rows in set (0.00 sec)
簡単な説明
Yesod Middlewareの設置方法は、まず、middlewareを書く
-- src/Foundation.hs 抜粋 dbAccessMiddleware :: (YesodAuth site, YesodPersist site, YesodAuthPersist site, AuthId site ~ Key (AuthEntity site), PersistEntity (AuthEntity site), Typeable (AuthEntity site), AuthEntity site ~ User, YesodPersistBackend site ~ SqlBackend) => HandlerT site IO res -> HandlerT site IO res dbAccessMiddleware handler = do mauth <- maybeAuth case mauth of Nothing -> handler Just (Entity uid u) -> do runDB $ do si <- get ((toSqlKey 1) :: Key SystemInfo) case si of Just entity -> do case systemInfoInit entity of True -> liftIO getCurrentTime >>= \t -> (insert $ AccLog { accLogUserId = uid , accLogAccTime = t }) >> return () False -> return () _ -> $(logInfo) "system_info no initialized.." >> return () handlerで、Yesod Middlewareにくっつける
-- src/Foundation.hs 抜粋 yesodMiddleware = defaultYesodMiddleware . dbAccessMiddlewareこんな感じで実装できる、ちなみにmaybeAuthで認証済みユーザーのEntityが取得出きる。
0 件のコメント:
コメントを投稿