【问题标题】:Adding Authentication to existing Yesod project with Haskell使用 Haskell 向现有 Yesod 项目添加身份验证
【发布时间】:2023-03-21 02:45:01
【问题描述】:

我一直在使用this guide 为我的项目添加身份验证和授权。我是 Yesod 的新手,遇到了一些问题:

我正在使用以下基础数据:

data App = App (TChan Text)

对于我的身份验证,我需要这种数据类型:

data App = App SqlBackend

如何将两者结合起来?那么我是否还必须更改现有功能?

最后我像这样运行:

main :: IO ()
main = runNoLoggingT $ withSqliteConn "email.db3" $ \conn -> liftIO $ do
    runSqlConn (runMigration migrateAll) conn
    chan <- newTChanIO
    warp 3000 $ App chan
-- Backend SqlBackend needs to be initilized with conn (see below)


{- OLD
main = do
    chan <- newTChanIO
    warp 3000 $ App chan
-}

{- NEW
main = runNoLoggingT $ withSqliteConn "email.db3" $ \conn -> liftIO $ do
    runSqlConn (runMigration migrateAll) conn
    warp 3000 $ App conn
-}

我知道我必须将两者结合起来。我读了this article。我如何将chanconn 放在一起?这可能听起来微不足道,但那里几乎没有文档。

请帮帮我!

【问题讨论】:

    标签: haskell authentication authorization yesod templating


    【解决方案1】:

    通常人们将他们的App 数据类型设为具有多个字段的记录。例如,scaffolded Yesod project 使用此代码:

    data App = App
        { appSettings    :: AppSettings
        , appStatic      :: Static -- ^ Settings for static file serving.
        , appConnPool    :: ConnectionPool -- ^ Database connection pool.
        , appHttpManager :: Manager
        , appLogger      :: Logger
        }
    

    您链接到的example code 也这样做:

    data App = App
        { homepageContent :: Html
        , visitorCount    :: IORef Int
        }
    

    那么像这样的事情呢:

    -- Small caveat: this is code untested
    data App = App
            { backend :: SqlBackend
            , chan    :: TChan Text
            }
    
    main :: IO ()
    main = do
        chan <- newTChanIO
        runNoLoggingT $ withSqliteConn "email.db3" $ \conn -> liftIO $ do
            runSqlConn (runMigration migrateAll) conn
            warp 3000 $ App { backend=conn, chan=chan}
    

    您必须更改访问您的 TChan 的旧代码,但是一旦您的应用程序成为记录,您就可以添加更多字段而无需更改代码库的其余部分。

    附带说明一下,您是否考虑过使用Yesod scaffolding?您将从为您处理所有这些开始,并且已经为您实施了许多其他细节和最佳实践。

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2015-11-04
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多