こちらの「ツイッターでログインする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が出てしまいます。
どこを修正すればいいのでしょうか。
私自身が体験したことではないのですが、Safari のバグ (?) で、OAuth の realm を指定しなかった場合にエラーが発生してしまうという話を聞いたことがあります。
Authorization Header を使用して OAuth の protocol parameters を送信しているのであれば、realm の有無を確認し、realm を指定していない場合は指定してみてください。
(本回答における OAuth 関係の単語の定義は RFC 5849 に基づきます。)
サファリはMacOSなので出来ません。
私自身が体験したことではないのですが、Safari のバグ (?) で、OAuth の realm を指定しなかった場合にエラーが発生してしまうという話を聞いたことがあります。
Authorization Header を使用して OAuth の protocol parameters を送信しているのであれば、realm の有無を確認し、realm を指定していない場合は指定してみてください。
(本回答における OAuth 関係の単語の定義は RFC 5849 に基づきます。)
ありがとうございます。その認識で間違いありません。
確認したところ、Safariでは
$_SESSION['oauth_token']がNULLで、
$_SESSION['oauth_token_secret']がNULLで、
$_GET['oauth_verifier']が正常に取得できていました。
ただ、これらの値が取得できない原因と対策がよく分からないので現在にっちもさっちも行かない状態です
なるほど。 $_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 13:40:32確認したところ、Safariでは
$_SESSION['oauth_token']がNULLで、
$_SESSION['oauth_token_secret']がNULLで、
$_GET['oauth_verifier']が正常に取得できていました。
ただ、これらの値が取得できない原因と対策がよく分からないので現在にっちもさっちも行かない状態です
なるほど。 $_SESSION['oauth_token'] と $_SESSION['oauth_token_secret'] の値が期待通りでないのが原因のようですね。
2013/01/13 16:35:56$_SESSION['oauth_token'] や $_SESSION['oauth_token_secret'] はセッション変数と呼ばれるもので、ある条件下ではうまく動かないものです。 例えば cookie が無効であれば $_SESSION['oauth_token'] は NULL になると思います。 ないとは思いますが、Safari で cookie を無効にしているということはありませんか?
私はあまり PHP に詳しくないので何とも言えないのですが、Safari で cookie が無効になってないとすれば、他にセッションが無効になる理由などを探るのが今回の問題の解決の糸口になると思います。