मैंने एक डांसर वेब ऐप लिखा है जो प्रमाणीकरण के लिए OpenIDs का उपभोग करने के लिए Net::OpenID::Consumer
का उपयोग करता है। यह Google और MyOpenID के साथ अच्छी तरह से काम करता है, लेकिन याहू नहीं। यदि कोई उपयोगकर्ता अपने याहू खाते का उपयोग कर प्रमाणित करने के लिए कोशिश करता है, HTML::Parser
चेतावनी देते हैं:मैं याहू ओपनआईड्स के साथ नेट :: ओपनआईडी :: उपभोक्ता का उपयोग करके एन्कोडिंग त्रुटियों से कैसे बच सकता हूं?
Parsing of undecoded UTF-8 will give garbage when decoding entities
और इस चेतावनी मेरे ऐप (हक तो) को मारता है।
मुझे Net::OpenID::Consumer
(या सामान्य) के साथ कोई मौजूदा बग नहीं दिखाई देता है जो इससे संबंधित है।
HTTP शीर्षलेख और HTML मेटा टैग दोनों 'दावा आईडी' यूआरआई के लिए यूटीएफ -8 निर्दिष्ट करते हैं।
HTML::Parser
के लिए प्रतिक्रिया क्यों डीकोड नहीं की जाएगी? क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?
यहाँ प्रासंगिक कोड है:
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;
}
};
[अपने कोड दिखाएँ] (http://sscce.org) ताकि लोग [समस्या को पुन:] हो सकता है (http: // www.chiark.greenend.org.uk/~sgtatham/bugs.html#showmehow)। – daxim
लगता है जैसे आपने पार्सर को पास करने से पहले HTML को डीकोड नहीं किया था, इसलिए इसे डीकोड करें। अगर यह एलडब्ल्यूपी था, तो मैं '-> content' के बजाय' -> decoded_content' का उपयोग कहूंगा। –
उपयोगकर्ता 1215106, नेट :: ओपनआईडी :: कॉमन एचटीएमएल को पकड़ रहा है और पार्स कर रहा है, न कि मेरा कोड। – kbosak