2

我正在尝试在脚手架站点中使用 Yesod 的帐户身份验证插件。脚手架站点本身工作正常,插件本身工作正常,但是,当我尝试通过在 stack.yaml 文件中添加额外依赖项(即(extra-deps:[yesod))将插件集成到项目中时-auth-account-1.4.3]) 或不添加我必须在我的项目中进行大量更改的依赖项,在这两种情况下,堆栈构建都会失败,并出现来自 Account.hs 文件的以下错误:

Couldn't match type ‘UserAccount db0’ with ‘UserAccount db’
      Expected type: UserAccount db
                     -> HandlerT Auth (HandlerT master IO) Html
        Actual type: UserAccount db0
                     -> HandlerT Auth (HandlerT master0 IO) Html
      NB: ‘UserAccount’ is a type function, and may not be injective
      The type variable ‘db0’ is ambiguous
    • In the ambiguity check for ‘unregisteredLogin’
      To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
      When checking the class method:
        unregisteredLogin :: forall (db :: * -> *) master.
                             YesodAuthAccount db master =>
                             UserAccount db -> HandlerT Auth (HandlerT master IO) Html
      In the class declaration for ‘YesodAuthAccount’
    |
806 |     unregisteredLogin :: UserAccount db -> HandlerT Auth (HandlerT master IO) Html
    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

我在网上看到了一些关于添加“liftHandler”的解决方案。对于每个 runDB 操作并使用“代理主机”,但它们似乎不起作用。

我的猜测是项目中存在数据库冲突,因为脚手架站点使用示例数据库进行虚拟登录,不推荐用于生产版本。因此,我正在寻找一个高效的身份验证插件。

任何类型的帮助将不胜感激。

提前致谢。

4

0 回答 0