YII2 OAuth Client Instagram-重定向时,Instagram删除“ authclient = instagram”

时间:2018-07-23 11:22:58

标签: oauth yii2 instagram

我正在使用yii2 oauthclinet扩展名kotchuprik / yii2-instagram-authclient

所以它起作用了,但是一件事却不起作用

我在instagram上注册了我的应用redirurl

myappurl/site/auth?authclient=instagram

所以我期望的redirecturl应该是这样的:

myappurl/site/auth?authclient=instagram&code=....

但是它来了

myappurl/site/auth?code=...

我认识到在浏览器中使用开发人员工具

https://www.instagram.com/accounts/login/ajax/

username=myusernam
password=mypassword
queryParams={"next":"/oauth/authorize?client_id=theclientid&   
response_type=code&redirect_uri=myappurl/site/auth?authclient=instagram&
xoauth_displayname=MyApps&state=statenumbers"}

这样就可以了,下一个获取请求是错误的

https://www.instagram.com/oauth/authorize?client_id=theclientid&
response_type=code&redirect_uri=myappurl%2Fsite%2Fauth%3Fauthclient&
xoauth_displayname=MyApps&state=statenumbers

client_id=theclientid
response_type=code
redirect_uri=myappurls%2Fsite%2Fauth%3Fauthclient
xoauth_displayname=MyApp
state=statenumbers

= instagram消失了

然后从instagram重定向的网址是:

myappurl/site/auth?code=codenumbers&state=statenumbers

所以这个错误authclient = instagram丢失了,我不知道为什么

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我试图在会话中保存authlclient。从服务器收到响应后,我检查会话并使用authlclient参数进行重定向。另外,我在returnUrl客户端的配置中将Instagram设置为site/auth,而没有使用authclient参数,因为使用fetchAccessToken来获取数据时还有另一个问题方法。当您已经登录到instagram时,它成功传递了所有内容;而当您登录时,它发出了一个错误,尽管请求是相同的。这很奇怪。也许有人找到了解决问题的正确方法。

答案 1 :(得分:0)

我做了一些变通方法,虽然不是很漂亮,但是可以工作。

`class AuthAction extends \yii\authclient\AuthAction
{

public function run()
{
$clientId = Yii::$app->getRequest()->getQueryParam($this->clientIdGetParamName);
if (!empty($clientId)) {
    $collection = Yii::$app->get($this->clientCollection);
    if (!$collection->hasClient($clientId)) {
        throw new NotFoundHttpException("Unknown auth client '{$clientId}'");
    }
    $client = $collection->getClient($clientId);

    return $this->auth($client);
} else {
    $clientId = 'instagram';
    $collection = Yii::$app->get($this->clientCollection);
    if (!$collection->hasClient($clientId)) {
        throw new NotFoundHttpException("Unknown auth client '{$clientId}'");
    }
    $client = $collection->getClient($clientId);

    return Yii::$app->response->redirect(['/site/auth','authclient'=>'instagram']);

}

 // throw new NotFoundHttpException();
}
}`

所以我认为instagram识别出在此设备上已登录instagram用户,并且返回的不是带有authclient参数的已定义或预期的url。或它的Instagram错误:-)。

如果某人有类似的问题,那将是一个好消息,那就是更多的人被这个问题感染了。所以也许我们可以找到解决方案。