使用Snap进行身份验证:多次使用snaplet

时间:2017-03-16 16:31:13

标签: haskell-snap-framework

我正在使用Snap构建一个需要对员工和客户进行身份验证的Web应用程序。到目前为止,我使用snaplet-postgresql-simple提供的auth snaplet来验证数据库中同一个表中的两种类型的用户。

因此初始化代码如下所示:

s  <- nestSnaplet "sess" sess $ initCookieSessionManager sessionKeyfile "sess" Nothing (Just sessionTimeout)
db <- nestSnaplet "pg" pg Pg.pgsInit
a  <- nestSnaplet "auth" auth $ initPostgresAuth sess db

我考虑将这两类用户分成两个表:

  • 与每种类型的用户(即列)相关的信息实际上是不同的(例如,我不需要知道员工的名字和姓氏)
  • 我想让员工在没有登录前端的情况下对后端进行身份验证(我想我需要单独的cookie)
  • 我认为如果两种类型的用户位于不同的表中,安全性可能会受益

我考虑将两个snaplet实例用于postgresql-simple和sessions。

初始化代码看起来像这样:

s1  <- nestSnaplet "sess1" sess1 $ initCookieSessionManager sessionKeyfile "sess1" Nothing (Just sessionTimeout)
s2  <- nestSnaplet "sess2" sess2 $ initCookieSessionManager sessionKeyfile "sess2" Nothing (Just sessionTimeout)
db  <- nestSnaplet "pg" pg Pg.pgsInit
a1  <- nestSnaplet "auth1" auth1 $ initPostgresAuth sess1 db
a2  <- nestSnaplet "auth2" auth2 $ initPostgresAuth sess2 db

可以使用像这样的snaplet的几个实例吗? 或者我的问题有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我不会使用两个实例。我使用单个实例,其中用户表示两者共有的任何内容,然后添加用户类型列并将额外信息放在与外键链接的其他表中。