From d470c007fc18c9112804155e495ff295cd60ef88 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 7 Sep 2010 16:15:32 -0700 Subject: [PATCH] Quick fix for #2659: unable to login with Livejournal OpenID The Net::OpenID::Server perl module that LJ uses appears to be very picky about input, and rejects most request types unless the data comes in as GET parameters (apparently following OpenID 1.1 rules, rather than OpenID 2.0 rules which permit any request to be POSTed but requires that if so, the data must all be in the POST body). Apparently something got updated on LJ at some point that's either added that behavior or (more likely) added the OpenID 2.0 namespace info to discovery, which tells the Janrain-based OpenID libraries that they should go ahead and do POST requests instead of redirects to GET requests... thus breaking everything. ;) GET should be just fine for both 1.1 and 2.0 though, and also saves having to sit through that lame autosubmit page. Switched the authentication submission from checking whether it should redirect to GET or do a form POST, to simply always doing the redirect to GET. Tested against providers: * LiveJournal * Google * LaunchPad * identi.ca --- plugins/OpenID/openid.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php index 4ce350f773..1b93163e5f 100644 --- a/plugins/OpenID/openid.php +++ b/plugins/OpenID/openid.php @@ -182,7 +182,19 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) $trust_root = common_root_url(true); $process_url = common_local_url($returnto); - if ($auth_request->shouldSendRedirect()) { + // Net::OpenID::Server as used on LiveJournal appears to incorrectly + // reject POST requests for data submissions that OpenID 1.1 specs + // as GET, although 2.0 allows them: + // https://rt.cpan.org/Public/Bug/Display.html?id=42202 + // + // Our OpenID libraries would have switched in the redirect automatically + // if it were detecting 1.1 compatibility mode, however the server is + // advertising itself as 2.0-compatible, so we got switched to the POST. + // + // Since the GET should always work anyway, we'll just take out the + // autosubmitter for now. + // + //if ($auth_request->shouldSendRedirect()) { $redirect_url = $auth_request->redirectURL($trust_root, $process_url, $immediate); @@ -194,6 +206,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) } else { common_redirect($redirect_url, 303); } + /* } else { // Generate form markup and render it. $form_id = 'openid_message'; @@ -219,6 +232,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false) $action->handle(array('action' => 'autosubmit')); } } + */ } # Half-assed attempt at a module-private function