He escrito una aplicación web Dancer que utiliza Net::OpenID::Consumer
para consumir OpenID para la autenticación. Funciona bien con Google y MyOpenID, pero no con Yahoo. Cuando un usuario intenta autenticarse utilizando su cuenta de Yahoo, HTML::Parser
advierte:¿Cómo puedo evitar errores de codificación usando Net :: OpenID :: Consumer con Yahoo OpenIDs?
Parsing of undecoded UTF-8 will give garbage when decoding entities
y esta advertencia mata mi aplicación (razón).
No veo ningún error existente con Net::OpenID::Consumer
(o común) relacionado con esto.
Los encabezados HTTP y las metaetiquetas HTML especifican UTF-8 para el URI "ID reclamado".
¿Por qué no se debe decodificar la respuesta para HTML::Parser
? ¿Me estoy perdiendo algo obvio?
Aquí está el código correspondiente:
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;
}
};
[Mostrar su código] (http://sscce.org) para que la gente [reproducir el problema] (http: // www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow). – daxim
Parece que no decodificó el HTML antes de pasarlo al analizador, así que descodifíquelo. Si esto era LWP, diría que use '-> decoded_content' en lugar de' -> content'. –
user1215106, Net :: OpenId :: Common está capturando y analizando el HTML, no mi código. – kbosak