从Yesod OpenID检索电子邮件地址

时间:2012-04-30 00:57:56

标签: haskell openid yesod

使用Yesod的OpenId实施进行身份验证后,有没有办法检索用户的电子邮件地址?

在我的测试应用中,重定向和身份验证正确发生,maybeAuthId为我提供了数据库中相应条目的ID。但是,该身份将存储为URL。

我可以使用它,但是也可以像其他OpenId软件包那样获取用于进行身份验证的实际电子邮件。这可能是Yesod的OpenId吗?我可以用authOpenIdExtended做些什么(不清楚如何使用它)?

2 个答案:

答案 0 :(得分:3)

查看GoogleEmail模块。您需要记住的一件事是,您不一定信任每个OpenID提供商。如果您使用电子邮件地址进行任何重要的操作,恶意用户可以简单地设置一个OpenID提供商,让他/她声明他/她希望的地址。

答案 1 :(得分:2)

再次调查后,我找到了答案:

首先,我们需要使用带有正确参数的authOpenIdExtended:

authPlugins _ = [authOpenIdExtended [("openid.ns.ax", "http://openid.net/srv/ax/1.0"), 
                                     ("openid.ax.mode", "fetch_request"), 
                                     ("openid.ax.type.email", "http://axschema.org/contact/email"),
                                     ("openid.ax.required", "email")
                                     ]]

我在此页面中找到了这些值:https://developers.google.com/accounts/docs/OpenID并验证它们可以与Google和Yahoo合作。

然后,为了使用我们检索到的电子邮件地址,我们在传递给getAuthId的creds参数上调用“credsExtra creds”。这为我们提供了一个包含OpenId提供程序响应的元组列表。当使用上面的参数authOpenIdExtended时,我们在键/值元组中找到我们的电子邮件,其值为“openid.ax.value.email”(对于Yahoo)或“openid.ext1.value.email”(对于Google)。我期待Google也使用“openid.ax.value.email”密钥,但足够接近。

我希望这有助于某人。

相关问题