2012-06-25 47 views
5

Kimlik doğrulama için OpenID'leri kullanmak üzere Net::OpenID::Consumer kullanan bir Dancer web uygulaması yazdım. Google ve MyOpenID ile iyi çalışıyor, ancak Yahoo değil. Bir kullanıcı, Yahoo hesabını kullanarak kimlik doğrulaması çalıştığında, HTML::Parser uyarıyor:Net :: OpenID :: Consumer ile Yahoo OpenIDs kullanarak kodlama hatalarını nasıl önleyebilirim?

Parsing of undecoded UTF-8 will give garbage when decoding entities

ve bu uyarı Uygulamamı (haklı nedenle) öldürür.

Net::OpenID::Consumer (veya Ortak) ile ilişkili herhangi bir hata göremiyorum.
HTTP üstbilgileri ve HTML meta etiketleri, "hak talebinde bulunulan id" URI'sı için UTF-8 belirtiyor.
Yanıt neden HTML::Parser için çözülmez? Belli bir şey eksik miyim?

İlgili kod İşte:

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; 
    } 
}; 
+0

[kodunuzu göster] (http://sscce.org) insanlar (http [sorunu yeniden] böylece: // www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow). – daxim

+1

HTML'yi Parser'a iletmeden önce şifresini çözmediğiniz için, kodu çözün. Eğer bu LWP ise, '-> content' yerine' -> decoded_content' kullanılır. –

+1

user1215106, Net :: OpenId :: Common, HTML'mizi değil, kodumu ayırıyor ve ayrıştırıyor. – kbosak

cevap

1

hata olduğu İnternet/OpenID'yi/URIFetch.pm hatlarında sürüm 1.14 (son) Ham içerik yerine, karşılık nesne kodu çözülmüş içeriği kullanıyor arasında 122-128. Sadece manuel gzip kod çözmeyi kaldırın ve yanıtta decoded_content yöntemini kullanın.

Henüz bir hata raporu göndermedim, çekinmeyin. :) İşte

bunu düzeltmek için uygulayabileceğiniz bir fark var:

122c122 
<   my $content = $res->decoded_content; 
--- 
>   my $content = $res->content; 
125a126,129 
>   if ($res->content_encoding && $res->content_encoding eq 'gzip') { 
>    $content = Compress::Zlib::memGunzip($content); 
>   } 
> 
+0

Harika, teşekkürler! Yakında bir hata raporu gönderirim ve bu gönderiyi bağlar. – kbosak