Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Haskell向现有Yesod项目添加身份验证_Haskell_Authentication_Authorization_Yesod_Templating - Fatal编程技术网

使用Haskell向现有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

我一直在使用,以便为我的项目添加身份验证和授权。我是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
-}
-- 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
的旧代码,但一旦您的应用程序成为记录,您就可以添加更多字段,而无需更改代码库的其余部分

作为补充说明,您是否考虑过使用?您可以从为您处理所有这些开始,并为您实现一系列其他细节和最佳实践