确保用户提供了配置文件的基本信息

时间:2015-02-10 20:43:29

标签: yesod

我的登录流程类似于此问题Yesod auth: redirecting user to registration page

中描述的登录流程

用户使用其中一种方法(Persona,Facebook,Google +)登录后,他会被重定向到要求他填写有关其个人资料(姓名,电子邮件等)的基本信息的页面,应用尝试从登录提供程序中获取尽可能多的信息,并为用户预填充配置文件字段。用户提交个人资料表单后,他会被重定向回到他来自的页面(这很重要,我不想像上面链接的问题那样将它们重定向回HomeR。)

现在关于实施。我的模型基本上看起来像这样:

User
    ident Text
    profile Profile Maybe
    UniqueUser ident
    deriving Typeable Show
Profile
    name  Text
    email Text
    deriving Typeable Show

对于非现有用户,我在Nothing中创建了getAuthId个人资料。在onLogin之后,我检查用户是否有个人资料,如果没有,则将其重定向到CreateProfileR。在CreateProfileR中,我呈现表单,接收输入,然后使用redirectUltDest,以便用户返回到它来自的位置。

一切都很好,但有一个问题。如果用户行为不端并离开CreateProfileR而没有填写他的个人资料,我最终会遇到登录用户,他们没有提供重要信息。这不好。

所以我想要的是将用户重定向到CreateProfileR,只要它不提交他的个人资料。

由于我不想在我的所有处理程序中处理它,我试图在maybeAuthId中执行它。但是如果我这样做,用户就会卡在CreateProfileR上(我想我可以通过从请求中提取路由并使CreateProfileR成为一条不会重定向到自身的特殊路由来避免它,但这似乎不是一个很好的解决方案)。

似乎maybeAuthId不是正确的地方,但我无法找到解决问题的好方法。您认为正确的方式是什么?

0 个答案:

没有答案