Twitter 登录 oauth api 不断重定向我以授权应用程序
Twitter sign in oauth api keeps redirecting me to authorize application
我正在使用 twitter oauth,我遇到了 twitter 的问题,要求我授权使用该应用程序,即使我已经授权了该应用程序。例如,我授权应用程序的使用,注销,然后转到 Twitter 登录,它再次要求我授权应用程序的使用。请注意,我的问题是关于让我授权应用程序而不是我想象的身份验证区域,一旦授权问题得到解决,Twitter 的身份验证就会起作用。
流程应该是:
1./ 用户通过推特授权。
2./推特发送回调
3./回调执行数据库交互,用于保存用户和验证用户与应用程序
4./回调重定向到首页
5./ 用户注销应用程序(所有会话数据被销毁)
6./ 用户使用 Twitter 重新登录,Twitter 不应重新授权,但应识别用户并重定向到应用程序,该应用程序应以某种方式从 Twitter 进行身份验证,可能与数据库中的 oauth 令牌匹配?
不确定这是否适用,但即使我在完成授权后就去推特登录,它仍然要求我重新授权
这是我的代码:
推特登录码
use Abraham\TwitterOAuth\TwitterOAuth;
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret);
$request_token= $connection->oauth('oauth/request_token', array('oauth_callback' => "https://example.com/twittercallback"));
$_SESSION['oauth_token']=$request_token['oauth_token'];
$_SESSION['oauth_token_secret']=$request_token['oauth_token_secret'];
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
header('Location: '. $url);
这是我的回调代码:
use Abraham\TwitterOAuth\TwitterOAuth;
$oauth_access_token = $_SESSION['oauth_token'];
$oauth_access_token_secret = $_SESSION['oauth_verifier'];
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret,$oauth_access_token , $oauth_access_token_secret );
$access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_REQUEST['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token']));
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret, $access_token['oauth_token'], $access_token['oauth_token_secret']);
$user_info = $connection->get('account/verify_credentials',['include_email'=>'true']);
$oauth_token = $access_token['oauth_token'];
$oauth_token_secret = $access_token['oauth_token_secret'];
print "<pre>".print_r($user_info,true)."</pre>";
您需要将用户重定向到 https://api.twitter.com/oauth/authenticate
而不是 https://api.twitter.com/oauth/authorize
https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate.html
更改此行
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
到
$url = $connection->url("oauth/authenticate", array("oauth_token" => $request_token['oauth_token']));
我正在使用 twitter oauth,我遇到了 twitter 的问题,要求我授权使用该应用程序,即使我已经授权了该应用程序。例如,我授权应用程序的使用,注销,然后转到 Twitter 登录,它再次要求我授权应用程序的使用。请注意,我的问题是关于让我授权应用程序而不是我想象的身份验证区域,一旦授权问题得到解决,Twitter 的身份验证就会起作用。
流程应该是:
1./ 用户通过推特授权。
2./推特发送回调
3./回调执行数据库交互,用于保存用户和验证用户与应用程序
4./回调重定向到首页
5./ 用户注销应用程序(所有会话数据被销毁)
6./ 用户使用 Twitter 重新登录,Twitter 不应重新授权,但应识别用户并重定向到应用程序,该应用程序应以某种方式从 Twitter 进行身份验证,可能与数据库中的 oauth 令牌匹配?
不确定这是否适用,但即使我在完成授权后就去推特登录,它仍然要求我重新授权
这是我的代码:
推特登录码
use Abraham\TwitterOAuth\TwitterOAuth;
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret);
$request_token= $connection->oauth('oauth/request_token', array('oauth_callback' => "https://example.com/twittercallback"));
$_SESSION['oauth_token']=$request_token['oauth_token'];
$_SESSION['oauth_token_secret']=$request_token['oauth_token_secret'];
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
header('Location: '. $url);
这是我的回调代码:
use Abraham\TwitterOAuth\TwitterOAuth;
$oauth_access_token = $_SESSION['oauth_token'];
$oauth_access_token_secret = $_SESSION['oauth_verifier'];
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret,$oauth_access_token , $oauth_access_token_secret );
$access_token = $connection->oauth('oauth/access_token', array('oauth_verifier' => $_REQUEST['oauth_verifier'], 'oauth_token'=> $_GET['oauth_token']));
$connection = new TwitterOAuth(twitter_apikey,twitter_apisecret, $access_token['oauth_token'], $access_token['oauth_token_secret']);
$user_info = $connection->get('account/verify_credentials',['include_email'=>'true']);
$oauth_token = $access_token['oauth_token'];
$oauth_token_secret = $access_token['oauth_token_secret'];
print "<pre>".print_r($user_info,true)."</pre>";
您需要将用户重定向到 https://api.twitter.com/oauth/authenticate
而不是 https://api.twitter.com/oauth/authorize
https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate.html
更改此行
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token']));
到
$url = $connection->url("oauth/authenticate", array("oauth_token" => $request_token['oauth_token']));