我正在使用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丢失了,我不知道为什么
有什么想法吗?
答案 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错误:-)。
如果某人有类似的问题,那将是一个好消息,那就是更多的人被这个问题感染了。所以也许我们可以找到解决方案。