AuthAction in yii2



我正在尝试实现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

祝你好运,玩得开心!

最新更新