0

当我调用消费者的 complete() 方法时,我收到“发现 [openid 标识符] 后找不到匹配的端点”错误。

有趣的是,在我测试过的四个 OpenID 提供程序中,只有 LiveJournal 才能观察到这种行为。您可以建议哪些步骤来调查和解决问题?

store = FileOpenIDStore("/path/to/store")

def login(req, uri):
    req.content_type = "text/html"
    session = Session.Session(req)
    consumer = Consumer(session, store)
    auth = consumer.begin(uri)
    util.redirect(req, auth.redirectURL("http://example.com", "http://example.com/authtest.py?sid=" + session.id()))
    return

def index(req, sid):
    req.content_type = "text/html"
    c = Consumer(Session.Session(req, sid), store)
    args = req.args.split("&")
    arg_dict = {}
    for i in range(0, len(args)):
        x, y = args[i].split("=")
        arg_dict[x] = unquote(y)
    v = c.complete(arg_dict, "http://example.com/authtest.py?" + req.args)
    if v.status == 'failure':
        return v.message
    else:
        return v.status
4

1 回答 1

1

我在您的代码中没有看到任何明显的错误,但这里有一些调查步骤:

  • 有任何输出oidutil.log吗?它默认记录到 stderr,但如果您的 Web 服务器不允许您看到 stderr,您可以覆盖它以登录到其他地方。

  • 捕获所有请求/响应。您可以使用TamperData之类的东西 来获取通过浏览器传递的间接请求/响应,并将其contrib/openid-parse从 python-openid 分发版提供给它以使其更具可读性。

  • python-openid 源代码分发中的示例使用者是否与您的 LJ 标识符一起使用?如果是这样,示例和您的代码之间的请求/响应有什么区别?

  • 您的 LJ 标识符中有标点符号吗?

  • LJ 是您测试的唯一 OpenID 版本 1.x 提供商吗?(可能。希望不会剩下太多。)

  • 您的参数解析可以使用urlparse.parse_qs,但我不确定这是否真的有问题。(并且 parse_qs 返回 {key: [list-of-values]},而Consumer.complete期望 {key: single-value},因此您必须将一个映射到另一个。)

于 2010-03-04T21:45:37.850 回答