我正在使用Yii authclient来使用社交登录。我已经设置了docs中定义的所有内容,但是当我尝试登录google时,它没有调用onAuthSuccess方法。当我尝试登录时,它只是将我重定向到 returnUrl,但没有进行身份验证。下面是我的代码;
配置文件/主文件.php
'authClientCollection' => [
'class' => \yii\authclient\Collection::class,
'clients' => [
'google' => [
'class' => \yii\authclient\clients\Google::class,
'clientId' =>*********, //changed for issue purpose
'clientSecret' =>*********, //changed for issue purpose
'returnUrl' => 'http://localhost/site/landing',
],
],
]
控制器/站点控制器
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout', 'signup', 'auth'],
'rules' => [
[
'actions' => ['signup', 'auth'],
'allow' => true,
'roles' => ['?'],
],
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
'create-storyboard' => ['post'],
],
],
];
}
/**
* {@inheritdoc}
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
'auth' => [
'class' => 'yii\authclient\AuthAction',
'successCallback' => [$this, 'onAuthSuccess'],
],
];
}
public function onAuthSuccess($client)
{
(new AuthHandler($client))->handle();
}
2条答案
按热度按时间camsedfj1#
如果您设置returnUrl,则用户将从身份验证提供程序直接重定向到您在该属性中设置的url。
在你的情况下,returnUrl说谷歌,它应该把用户重定向到
http://localhost/site/landing
。但在你的网站/登陆操作中没有任何东西会调用onAuthSuccess。您需要让用户返回到site/auth并在处理来自OAuth提供程序的响应后重定向他们。为此,请从配置中删除returnUrl。这将使authclient使用默认的返回URL,该URL是启动验证过程的操作。
然后修改您的onAuthSuccess以将用户重定向到站点/登录,如下所示:
6ljaweal2#
我在@Michal Hynčica的帮助下解决了这个问题。问题出在我的 returnUrl 中,这意味着它必须遵循认证URL来进行认证,而不是在认证后重定向。所以我所要做的就是将其更改为如下所示。
也不要忘记添加相同的returnUrl到您的谷歌控制台的重定向网址。