Ich habe eine Dancer Web App geschrieben, die Net::OpenID::Consumer
nutzt, um OpenIDs zur Authentifizierung zu verwenden. Es funktioniert gut mit Google und MyOpenID, aber nicht mit Yahoo. Wenn ein Benutzer versucht, mit ihrem Yahoo-Konto zu authentifizieren, HTML::Parser
warnt:Wie kann ich Codierungsfehler mit Net :: OpenID :: Consumer mit Yahoo OpenIDs vermeiden?
Parsing of undecoded UTF-8 will give garbage when decoding entities
und diese Warnung tötet meine app (zu Recht).
Ich sehe keine vorhandenen Fehler mit Net::OpenID::Consumer
(oder Common), die sich darauf beziehen.
Die HTTP-Header und die HTML-Meta-Tags geben beide UTF-8 für den URI 'beanspruchte ID' an.
Warum wurde die Antwort nicht für HTML::Parser
decodiert? Fehle ich etwas Offensichtliches?
Hier ist der entsprechende Code:
get '/openid_landing' => sub {
my $params = params();
my $csr = Net::OpenID::Consumer->new(
ua => LWP::UserAgent->new(),
consumer_secret => $secret,
params => $params,
);
my $id = $params->{'openid.claimed_id'};
if (my $setup_url = $csr->user_setup_url) {
redirect $setup_url;
} elsif ($csr->user_cancel) {
redirect uri_for('/');
} elsif (my $vident = $csr->verified_identity) {
# verified identity, log in or register user
...
} else {
die "Error validating identity: " . $csr->err;
}
};
[Zeigen Sie Ihren Code] (http://sscce.org), so dass die Menschen können [Reproduzieren des Problems] (http: // www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmeshow). – daxim
Klingt so, als ob Sie das HTML nicht entschlüsselt haben, bevor Sie es an Parser übergeben haben, also entschlüsseln Sie es. Wenn das LWP wäre, würde ich sagen '' -> decoded_content' anstelle von '-> content'. –
user1215106, Net :: OpenId :: Common ist das Ergreifen und Parsing des HTML, nicht meines Codes. – kbosak