1

私はソーシャル マネジメント サービスを開発しており、開発プロセスの中で多くの技術についても学んでいます。ここに私が書かなければならないものがあります:

  1. ユーザーは自分の Twitter アカウントで認証する必要があります
  2. その後、mysql でこれらのパラメータを保存しています: oauth_tokenoauth_verifierおよびoauth_secret
  3. 別のファイルでは、データベースからこれら 3 つのパラメーターを要求し、それをコードで使用しています。

問題は、ユーザーが自分のサイト (Twitter からではなく) からログアウトし、再度ログインすると、関数で次のエラーが発生することgetAccessTokenです。

twitter/twitteroauth.php の 127 行目の「未定義のインデックス: oauth_token」

そして、私はなぜわからないのですか?と を使用Abraham's libしてLaravel Frameworkいます。

Twitterにログインするための私のコードは次のとおりです。

<?php

class Twitter_Controller extends OneAuth\Auth\Controller
{
    function action_index()
    {

// The TwitterOAuth instance
$twitteroauth = new TwitterOAuth('ABCD', 'EFGH');
// Requesting authentication tokens, the parameter is the URL we will be redirected to
$request_token = $twitteroauth->getRequestToken('http://someurl.com/members');

// Saving them into the session
$username = Cookie::get('username');
DB::table('twitter')->where('username', '=', $username)->update(array( 'oauth_token'=>$request_token['oauth_token'],
                                                                   'oauth_secret'=>$request_token['oauth_token_secret']));
//Cookie::put('oauth_token') = $request_token['oauth_token'];
//Cookie::put('oauth_token_secret') = $request_token['oauth_token_secret'];

// If everything goes well..
if($twitteroauth->http_code==200){
    $oauthtoken = DB::table('twitter')->where('username', '=', Cookie::get('username'))->only('oauth_token');
    $url = $twitteroauth->getAuthorizeURL($oauthtoken);
    header('Location: '. $url);
} else {
    // It's a bad idea to kill the script, but we've got to know when there's an error.
    die('Something wrong happened.');
}


    }
}

そして、これが「メイン」のTwitterファイルです(Twitterの詳細などを表示するため)

    <?php
    $oauthtoken = DB::table('twitter')->where('username', '=', Cookie::get('username'))->only('oauth_token');
    $haveTwitter = DB::table('user')->where('username', '=', Cookie::get('username'))->only('have_tw');
    $oauthsecret = DB::table('twitter')->where('username', '=', Cookie::get('username'))->only('oauth_secret');
    $twitteroauth = new TwitterOAuth('ABCD', 'EFGH',
     $oauthtoken, $oauthsecret);


    echo $haveTwitter;
    if($haveTwitter == '0')
    {
       $access_token=$twitteroauth->getAccessToken(Input::get('oauth_verifier'));
        DB::table('twitter')->where('username', '=', Cookie::get('username'))->update(array('oauth_verifier' => Input::get('oauth_verifier')));
       DB::table('user')->where('username', '=', Cookie::get('username'))->update(array('have_tw' => '1'));
    }
    if($haveTwitter == '1')
    {
        $oauth_verifier = DB::table('twitter')->where('username', '=', Cookie::get('username'))->only('oauth_verifier');
       echo $oauth_verifier;
      $access_token=$twitteroauth->getAccessToken($oauth_verifier);
    }
    $user_info = $twitteroauth->get('account/verify_credentials');
    dd($user_info);
    ?>

変数$haveTwitterは、ユーザーが Twitter にログインするのが初めてか、以前に Twitter にログインしたかを示します。

私(私の英語は下手です)と私のコードを理解していただければ幸いです。何か問題がある場合は、質問してください。より適切に説明できるように努めます。

4

1 に答える 1

0

推測:

ユーザーがログアウトした場合、おそらく Cookie を削除します。

$username = Cookie::get('username');

次に、データベース ルックアップ:

$oauthtoken = DB::table('twitter')->where('username', '=', Cookie::get('username'))->only('oauth_token');

..何も返さないため、$oauthtoken にはデータが含まれません。

そうでない場合は、投稿を少し編集してください: 127 は何行目ですか? ログアウト スクリプトは何をしていますか?

于 2013-04-22T10:56:26.997 に答える