我正在使用Yii authclient来使用社交登录。我已经按照docs中的定义设置了所有内容,但是当我尝试使用Google登录时,它不会调用onAuthSuccess方法。当我尝试登录时,它只是将我重定向到 returnUrl ,但未通过身份验证。 这是我的代码;
config / main.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',
],
],
]
控制器/ SiteController
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();
}
答案 0 :(得分:1)
如果您设置了returnUrl,则来自身份验证提供程序的用户将直接重定向到您在该属性中设置的网址。
在您的情况下,returnUrl说google,它应该将用户重定向到http://localhost/site/landing
。但是您的站点/着陆操作中没有任何东西可以调用onAuthSuccess。
您需要让用户返回到站点/身份验证,并在处理来自OAuth提供程序的响应后将其重定向。为此,请从配置中删除returnUrl。这将使authclient使用默认的返回URL,这是启动auth进程的动作。
然后修改您的onAuthSuccess,以将用户重定向到站点/登陆,如下所示:
public function onAuthSuccess($client)
{
(new AuthHandler($client))->handle();
$this->redirect(['site/landing']);
}
答案 1 :(得分:0)
我已经在@MichalHynčica的帮助下解决了这个问题。问题出在我的 returnUrl 中,这意味着必须使用身份验证URL进行身份验证,而不是身份验证后的重定向。所以我要做的就是将其更改为以下内容。
'returnUrl' => 'http://localhost/site/auth?authclient=google'
也不要忘记将相同的returnUrl添加到您的Google控制台的重定向URL。