使用Haskell向现有Yesod项目添加身份验证
我一直在使用,以便为我的项目添加身份验证和授权。我是Yesod的新手,遇到了一些问题: 我使用下面的基础数据:使用Haskell向现有Yesod项目添加身份验证,haskell,authentication,authorization,yesod,templating,Haskell,Authentication,Authorization,Yesod,Templating,我一直在使用,以便为我的项目添加身份验证和授权。我是Yesod的新手,遇到了一些问题: 我使用下面的基础数据: data-App=App(TChan-Text) 对于我的身份验证,我需要以下数据类型: data-App=App-SqlBackend 我怎样才能把两者结合起来呢?那么,我是否也必须更改现有的功能 最后,我像这样运行一切: main :: IO () main = runNoLoggingT $ withSqliteConn "email.db3" $ \conn -> lif
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
-}
-- 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}
main::IO()
main=runnologging$withSqliteConn“email.db3”$\conn->liftIO$do
runSqlConn(runMigration migrateAll)conn
chan通常,人们将他们的应用程序
数据类型设置为包含多个字段的记录。例如,使用以下代码:
data App = App
{ appSettings :: AppSettings
, appStatic :: Static -- ^ Settings for static file serving.
, appConnPool :: ConnectionPool -- ^ Database connection pool.
, appHttpManager :: Manager
, appLogger :: Logger
}
您链接到的服务器也会这样做:
data App = App
{ homepageContent :: Html
, visitorCount :: IORef Int
}
那么像这样的事情呢:
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
-}
-- 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}
--小警告:这是未经测试的代码
数据应用程序=应用程序
{backend::SqlBackend
,chan::TChan Text
}
main::IO()
main=do
chan liftIO$do
runSqlConn(runMigration migrateAll)conn
warp 3000$App{backend=conn,chan=chan}
您必须更改访问TChan
的旧代码,但一旦您的应用程序成为记录,您就可以添加更多字段,而无需更改代码库的其余部分
作为补充说明,您是否考虑过使用?您可以从为您处理所有这些开始,并为您实施一系列其他细节和最佳实践。通常,人们会将其应用程序
数据类型设置为具有多个字段的记录。例如,使用以下代码:
data App = App
{ appSettings :: AppSettings
, appStatic :: Static -- ^ Settings for static file serving.
, appConnPool :: ConnectionPool -- ^ Database connection pool.
, appHttpManager :: Manager
, appLogger :: Logger
}
您链接到的服务器也会这样做:
data App = App
{ homepageContent :: Html
, visitorCount :: IORef Int
}
那么像这样的事情呢:
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
-}
-- 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}
--小警告:这是未经测试的代码
数据应用程序=应用程序
{backend::SqlBackend
,chan::TChan Text
}
main::IO()
main=do
chan liftIO$do
runSqlConn(runMigration migrateAll)conn
warp 3000$App{backend=conn,chan=chan}
您必须更改访问TChan
的旧代码,但一旦您的应用程序成为记录,您就可以添加更多字段,而无需更改代码库的其余部分
作为补充说明,您是否考虑过使用?您可以从为您处理所有这些开始,并为您实现一系列其他细节和最佳实践