我正在尝试实现yiiauthclientAuthAction的successCallback.
我的代码是这样的:
public function actions()
{
return [
'auth' => [
'class' => 'yiiauthclientAuthAction',
'successCallback' => [$this, 'successCallback'],
],
];
}
/**
* @param yiiauthclientClientInterface $client
*/
public function successCallback($client)
{
$attributes = $client->getUserAttributes();
$externalUser = new AuthForm();
$externalUser->authProvider = $client->getName();
$externalUser->externalUserId = array_key_exists('id', $attributes) ? $attributes['id'] : null;
if ($externalUser->validate())
{
if ($externalUser->isRegistered())
{
$externalUser->login();
return $this->redirect(['private/index']);
}
else
{
Yii::$app->session->set( 'signup/authProvider', $externalUser->authProvider );
Yii::$app->session->set( 'signup/attributes' , $attributes );
return $this->redirect(['site/signup']);
}
}
}
如何调用successCallback?我想调用auth方法。但我不能这样做吗?
这很可能工作得很好,但是您不允许访问auth
的操作。确保在控制器的行为中允许auth
。比如:
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors [ 'access' ] = [
'rules' => [
[
'actions' => [ 'auth' ],
'allow' => true,
],
],
];
return $behaviors;
}
Auth服务器响应成功后运行successCallback
。你必须配置authcollection(授权服务器的收集配置)
'components' => [
'authClientCollection' => [
'class' => 'yiiauthclientCollection',
'clients' => [
'google' => [
'class' => 'yiiauthclientclientsGoogleOpenId'
],
'facebook' => [
'class' => 'yiiauthclientclientsFacebook',
'clientId' => 'facebook_client_id',
'clientSecret' => 'facebook_client_secret',
],
// etc.
],
]
...
]
默认值:Yii2 authclient支持一些openid, oauth, oauth2 provider:
- [[ yii authclient 客户Facebook | Facebook]]。
- [[yii authclient 客户GitHub | GitHub]]。
- Google(通过[[yiiauthclientclientsGoogleOpenId|OpenID]]和[[yiiauthclientclientsGoogleOAuth|OAuth]]).
- [[yii authclient 客户LinkedIn | LinkedIn]]。
- [[yii authclient 客户生活|微软的Live]]。
- [[yii authclient Twitter | Twitter客户端]]。
- [[yii authclient 客户VKontakte | VKontakte]]。
- Yandex(通过[[yiiauthclientclientsYandexOpenId|OpenID]]和[[yiiauthclientclientsYandexOAuth|OAuth]]).
已经准备好使用[[yiiauthclientwidgetsAuthChoice]] widget在视图中使用:
<?= yiiauthclientwidgetsAuthChoice::widget([
'baseAuthUrl' => ['site/auth'],
'popupMode' => false,
]) ?>
更多信息:https://github.com/yiisoft/yii2-authclient/tree/master/docs/guide
祝你好运,玩得开心!