Net::OpenID::Consumer
を使用して認証用のOpenIDを使用するDancer Webアプリケーションを作成しました。 GoogleとMyOpenIDではうまく動作しますが、Yahooではうまく動作しません。Yahoo OpenIDでNet :: OpenID :: Consumerを使用してエンコードエラーを回避するにはどうすればよいですか?
Parsing of undecoded UTF-8 will give garbage when decoding entities
をし、この警告は(当然のように)私のアプリを殺す:ユーザーがYahooのアカウントを使用して認証しようとすると、HTML::Parser
は警告しています。
これに関連するNet::OpenID::Consumer
(または共通)のバグはありません。
HTTPヘッダーとHTMLメタタグの両方で、「要求ID」URIにUTF-8が指定されています。
なぜ応答はHTML::Parser
のためにデコードされませんか?私は明白な何かを欠いていますかそれはあなたがTreeBuilderにページの内容を渡す前に、decode_utf8を介してそれらを養う、ボンネットの下にTreeBuilderで使用されている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
あなたはParserに渡す前にHTMLをデコードしていないのであれば、デコードしてください。これがLWPなら、 ' - > content'の代わりに' - > decoded_content'を使うといいでしょう。 –
user1215106、Net :: OpenId :: Commonは、自分のコードではなく、HTMLを取得して解析しています。 – kbosak