Oauth yii2中的AuthAction

Oauth yii2中的AuthAction,oauth,yii2,Oauth,Yii2,我正在尝试实现yii\authclient\AuthAction的successCallback 我的代码如下所示: public function actions() { return [ 'auth' => [ 'class' => 'yii\authclient\AuthAction', 'successCallback' => [$this, 'successCallback'], ], ];

我正在尝试实现yii\authclient\AuthAction的successCallback

我的代码如下所示:

public function actions()
  {
    return [
      'auth' => [
        'class' => 'yii\authclient\AuthAction',
        'successCallback' => [$this, 'successCallback'],
      ],
    ];
  }

  /**
   * @param \yii\authclient\ClientInterface $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;
}

当身份验证服务器响应成功时,它将运行
successCallback
。 必须配置authcollection(auth服务器的集合配置)

默认值:Yi2 authclient支持某些openid、oauth、oauth2提供程序:

  • [\yii\authclient\clients\Facebook | Facebook]]
  • [[yii\authclient\clients\GitHub | GitHub]]
  • 谷歌(通过[[yii\authclient\clients\GoogleOpenId | OpenID]]和[[yii\authclient\clients\GoogleOAuth | OAuth]])
  • [[yii\authclient\clients\LinkedIn | LinkedIn]]
  • [[yii\authclient\clients\Live | Microsoft Live]]
  • [[yii\authclient\clients\Twitter | Twitter]]
  • [[yii\authclient\clients\VKontakte | VKontakte]]
  • Yandex(通过[[yii\authclient\clients\YandexOpenId | OpenID]]和[[yii\authclient\clients\YandexOAuth | OAuth]])
在视图中可以使用[[yii\authclient\widgets\AuthChoice]]小部件:

<?= yii\authclient\widgets\AuthChoice::widget([
     'baseAuthUrl' => ['site/auth'],
     'popupMode' => false,
]) ?>

有关更多信息:

祝你好运,玩得开心

$externalUser->login()您想调用登录函数,但用户不登录?
<?= yii\authclient\widgets\AuthChoice::widget([
     'baseAuthUrl' => ['site/auth'],
     'popupMode' => false,
]) ?>