Yii 2 -验证客户端不调用验证成功

vlf7wbxs  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(201)

我正在使用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();
}
camsedfj

camsedfj1#

如果您设置returnUrl,则用户将从身份验证提供程序直接重定向到您在该属性中设置的url。
在你的情况下,returnUrl说谷歌,它应该把用户重定向到http://localhost/site/landing。但在你的网站/登陆操作中没有任何东西会调用onAuthSuccess。
您需要让用户返回到site/auth并在处理来自OAuth提供程序的响应后重定向他们。为此,请从配置中删除returnUrl。这将使authclient使用默认的返回URL,该URL是启动验证过程的操作。
然后修改您的onAuthSuccess以将用户重定向到站点/登录,如下所示:

public function onAuthSuccess($client)
{
    (new AuthHandler($client))->handle();
    $this->redirect(['site/landing']);
}
6ljaweal

6ljaweal2#

我在@Michal Hynčica的帮助下解决了这个问题。问题出在我的 returnUrl 中,这意味着它必须遵循认证URL来进行认证,而不是在认证后重定向。所以我所要做的就是将其更改为如下所示。

'returnUrl' => 'http://localhost/site/auth?authclient=google'

也不要忘记添加相同的returnUrl到您的谷歌控制台的重定向网址。

相关问题