人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

TwitterのOAuth認証のコールバックがうまくいきません

こちらの「ツイッターでログインするWebサービスの基礎」
http://dotinstall.com/lessons/tw_connect_php
をローカル環境で実行してみたのですが(php5.3.15、Apache2.2.22)
「コールバック機能を作り込む」のところまで進んで動作確認してみたのですが、何故かSafari6.0.2からアクセスした時に限って以下のようなエラーが出てしまいます。
object(stdClass)#5 (1) { ["errors"]=> array(1) { [0]=> object(stdClass)#6 (2) { ["message"]=> string(23) "Bad Authentication data" ["code"]=> int(215) } } }

Google ChromeやFireFoxから試した時にはこの動画と同じように問題無く動作するのですが、Safariの時だけBad Authentication dataが出てしまいます。
どこを修正すればいいのでしょうか。

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 匿名回答1号

サファリはMacOSなので出来ません。


2 ● 匿名回答2号
ベストアンサー

私自身が体験したことではないのですが、Safari のバグ (?) で、OAuth の realm を指定しなかった場合にエラーが発生してしまうという話を聞いたことがあります。

Authorization Header を使用して OAuth の protocol parameters を送信しているのであれば、realm の有無を確認し、realm を指定していない場合は指定してみてください。

(本回答における OAuth 関係の単語の定義は RFC 5849 に基づきます。)


匿名質問者さんのコメント
ありがとうございます。 すみません、realmの有無の確認と指定の方法がよく分からないのですが、realmとはどこでどんなふうに指定すればいいものでしょうか?

匿名回答2号さんのコメント
Safari のみで現象が発言するということでしたので、私が聞いた Safari のみで起こる問題を書いたのですが、どうやら今回の件とは別のような気がしてきました。 申し訳ありません。 ドットインストールの 「ツイッターでログインするWebサービスの基礎」 で使われている OAuth のライブラリは [https://github.com/abraham/twitteroauth:title=twitteroauth] ですが、このソースコードを見たところ Authorization Header を使用して OAuth の protocol parameters を送信しているわけではないようでした。 よって、realm の指定の話とは関係ないです。 『「コールバック機能を作り込む」のところまで進んで動作確認してみた』 とのことですが、ドットインストールの 「#11 動作確認をする」 の動画の 30 秒付近までの手順を進めたときに、web ページ上に 『object(stdClass)#5 (1) { ["errors"]=> array(1) { [0]=> object(stdClass)#6 (2) { ["message"]=> string(23) "Bad Authentication data" ["code"]=> int(215) } } }』 のエラーが表示される、という理解でよいのでしょうか。 もしそうなのであれば、callback.php の中で $_SESSION['oauth_token'] か $_SESSION['oauth_token_secret'] か $_GET['oauth_verifier'] のいずれかの値が期待するものではないのだと思います。 callback.php の中のそれらの値を確認してみてはどうでしょうか。

匿名質問者さんのコメント
ありがとうございます。その認識で間違いありません。 確認したところ、Safariでは $_SESSION['oauth_token']がNULLで、 $_SESSION['oauth_token_secret']がNULLで、 $_GET['oauth_verifier']が正常に取得できていました。 ただ、これらの値が取得できない原因と対策がよく分からないので現在にっちもさっちも行かない状態です

匿名回答2号さんのコメント
なるほど。 $_SESSION['oauth_token'] と $_SESSION['oauth_token_secret'] の値が期待通りでないのが原因のようですね。 $_SESSION['oauth_token'] や $_SESSION['oauth_token_secret'] はセッション変数と呼ばれるもので、ある条件下ではうまく動かないものです。 例えば cookie が無効であれば $_SESSION['oauth_token'] は NULL になると思います。 ないとは思いますが、Safari で cookie を無効にしているということはありませんか? 私はあまり PHP に詳しくないので何とも言えないのですが、Safari で cookie が無効になってないとすれば、他にセッションが無効になる理由などを探るのが今回の問題の解決の糸口になると思います。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ