oauth - Yii 2 - authclient 不调用 onAuthSuccess
问题描述
我正在使用 Yii authclient 来使用社交登录。我已经按照文档中的定义设置了所有内容,但是当我尝试使用 google 登录时,它不会调用 onAuthSuccess 方法。当我尝试登录时,它只是将我重定向到returnUrl但未经过身份验证。这是我的代码;
配置/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',
],
],
]
控制器/站点控制器
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();
}
解决方案
如果您设置 returnUrl,则用户来自身份验证提供程序,直接重定向到您在该属性中设置的 url。
在您的情况下,returnUrl 说谷歌,它应该将用户重定向到http://localhost/site/landing
. 但是您的站点/登陆操作中没有任何内容可以调用 onAuthSuccess。
您需要让用户在处理来自 OAuth 提供者的响应后返回站点/身份验证并重定向它们。为此,请从配置中删除 returnUrl。这将使 authclient 使用默认返回 url,这是启动 auth 过程的操作。
然后修改您的 onAuthSuccess 以将用户重定向到站点/登陆,如下所示:
public function onAuthSuccess($client)
{
(new AuthHandler($client))->handle();
$this->redirect(['site/landing']);
}
推荐阅读
- excel - Excel 盒须图:使用 VBA 隐藏内部点
- java - 使用 Springboot Filewatcher 后,Spring boot @Autowire 和其他 DI 注释不起作用
- firebase - Firebase:向firebase模拟器添加数据时刷新令牌无效
- reactjs - React SCSS:`rgba($color,$alpha)`的参数`$color`必须是颜色
- subdomain - 如何使用 VIteJS 在开发环境中创建子域?
- python - Concat 错误传递值的形状为 (9983, 9),索引暗示 (9883, 9
- python - RuntimeError:张量 (0) 的扩展大小必须与非单维 0 处的现有大小 (5) 匹配
- javascript - Scalajs-react:提取表单数据以将 json 发送到后端
- powershell - PowerShell:Foreach 用于 Where-Object 中的数组以验证属性匹配
- python - 在 Mac 上使用 docx2pdf 将 DOCX 批量转换为 PDF