保存oauth数据&从数据库(twitter)使用它

时间:2013-03-17 16:08:39

标签: php twitter oauth laravel

我正在开发社交管理服务,在开发过程中,我也在学习很多技术。以下是我要写的内容:

  1. 用户必须使用自己的Twitter帐户进行身份验证
  2. 之后,在mysql中我保存了这些参数:oauth_tokenoauth_verifieroauth_secret
  3. 在另一个文件中,我从数据库中请求这三个参数,并在我的代码中使用它。
  4. 问题是,当用户从我的网站(而不是从Twitter)注销而不是再次登录时,我在函数getAccessToken中收到此错误:

      

    第127行的twitter / twitteroauth.php中的“未定义索引:oauth_token”

    我不知道为什么?我正在使用Abraham's libLaravel 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.');
    }
    
    
        }
    }
    

    这是“主要”推特文件(用于显示推特细节等)。

        <?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。

    我希望你理解我(我的英语很糟糕)和我的代码。如果您有一些问题,请询问,我会尝试更好地解释。

1 个答案:

答案 0 :(得分:0)

猜测:

如果用户退出,您可能会删除cookie:

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

然后,您的数据库查找:

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

..不会返回任何内容,因此您的$ oauthtoken将不包含数据。

如果不是这样,请稍微编辑你的帖子:什么行是127?你的退出脚本在做什么?