匿名質問者

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が出てしまいます。
どこを修正すればいいのでしょうか。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2013/01/18 14:19:29

ベストアンサー

匿名回答2号 No.2

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

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

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

他2件のコメントを見る
匿名質問者

ありがとうございます。その認識で間違いありません。

確認したところ、Safariでは
$_SESSION['oauth_token']がNULLで、
$_SESSION['oauth_token_secret']がNULLで、
$_GET['oauth_verifier']が正常に取得できていました。

ただ、これらの値が取得できない原因と対策がよく分からないので現在にっちもさっちも行かない状態です

2013/01/13 13:40:32
匿名回答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 が無効になってないとすれば、他にセッションが無効になる理由などを探るのが今回の問題の解決の糸口になると思います。

2013/01/13 16:35:56

その他の回答1件)

匿名回答1号 No.1

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

匿名回答2号 No.2

ここでベストアンサー

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

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

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

他2件のコメントを見る
匿名質問者

ありがとうございます。その認識で間違いありません。

確認したところ、Safariでは
$_SESSION['oauth_token']がNULLで、
$_SESSION['oauth_token_secret']がNULLで、
$_GET['oauth_verifier']が正常に取得できていました。

ただ、これらの値が取得できない原因と対策がよく分からないので現在にっちもさっちも行かない状態です

2013/01/13 13:40:32
匿名回答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 が無効になってないとすれば、他にセッションが無効になる理由などを探るのが今回の問題の解決の糸口になると思います。

2013/01/13 16:35:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません