使用 OpenID 和 Python 获取电子邮件

1 投票
1 回答
660 浏览
提问于 2025-04-16 11:56

我正在尝试通过下面的表单和 web.py 从 OpenId 请求中获取一个电子邮件地址。我得到了一个 OpenId 哈希值,但在我的 Apache 环境中没有看到任何与电子邮件相关的内容——只有一个 openid_identity_hash。

这是我使用 web.py 的 HTML 表单。

<input type="text" name="openid" value="" style="background: url(http://openid.net/login-bg.gif) no-repeat; padding-left: 18px; background-position: 0 50%%;" />
<input type="hidden" name="return_to" value="${returnUrl}" />
<input type="hidden" name="openid.ns.ext1" value="http://openid.net/srv/ax/1.0" />
<input type="hidden" name="openid.ext1.mode" value="fetch_request" />
<input type="hidden" name="openid.ext1.type.email" value="http://axschema.org/contact/email" />
<input type="hidden" name="openid.ext1.required" value="email" />

我查看了 Google 开发者网站上与 OpenID 相关的文档,发现了一些需要包含的属性,我觉得我已经做到了。

openid.ns.ax=http://openid.net/srv/ax/1.0
openid.ax.mode=fetch_request
openid.ax.type.fname=http://example.com/schema/fullname
openid.ax.type.gender=http://example.com/schema/gender
openid.ax.type.fav_dog=http://example.com/schema/favourite_dog
openid.ax.type.fav_movie=http://example.com/schema/favourite_movie
openid.ax.count.fav_movie=3
openid.ax.required=fname,gender
openid.ax.if_available=fav_dog,fav_movie
openid.ax.update_url=http://idconsumer.com/update?transaction_id=a6b5c4

但是它实际上从来没有询问是否批准电子邮件请求,我在我的环境中也没有看到它。难道 web.py 就不支持这个吗?我可以使用其他工具,比如 authkit,来查询电子邮件吗?

1 个回答

0

@voodo,试着设置这些值。

openid.ns=http://specs.openid.net/auth/2.0&
openid.ns.alias3=http://openid.net/srv/ax/1.0&
openid.alias3.if_available=alias1,alias2,alias3&
openid.alias3.required=alias4&
openid.alias3.mode=fetch_request&
openid.alias3.type.alias1=http://schema.openid.net/namePerson&
openid.alias3.count.alias1=1&
openid.alias3.type.alias2=http://schema.openid.net/contact/email&
openid.alias3.count.alias2=1&
openid.alias3.type.alias3=http://axschema.org/namePerson&
openid.alias3.count.alias3=1&
openid.alias3.type.alias4=http://axschema.org/contact/email&
openid.alias3.count.alias4=1

我不太明白为什么这样做有效,而纯AX架构却不行,尽管谷歌的XRDS说明支持AX架构。

撰写回答