2015-10-21 8 views
8

Sto provando a implementare yii \ authclient \ AuthAction's successCallback.AuthAction in yii2

Il mio codice è simile al seguente:

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']); 
     }  
    } 
    } 

Come posso chiamare successCallback? Voglio chiamare il metodo auth. Ma non sono in grado di farlo?

+0

'$ externalUser-> login();' Vuoi chiamare la funzione di login ma l'utente non effettua il login? –

risposta

0

Molto probabilmente funziona correttamente, ma non è stato consentito l'accesso all'azione di auth. Assicurati di consentire auth nei tuoi comportamenti del controller. Qualcosa di simile:

public function behaviors() { 
    $behaviors = parent::behaviors(); 

    $behaviors [ 'access' ] = [ 
     'rules' => [ 
      [ 
       'actions' => [ 'auth' ], 
       'allow' => true, 
      ], 
     ], 
    ]; 

    return $behaviors; 
} 
0

Verrà eseguito successCallback quando la risposta del server Auth successo. È necessario config authcollection (collezione config del server di autenticazione)

'components' => [ 
    'authClientCollection' => [ 
     'class' => 'yii\authclient\Collection', 
     'clients' => [ 
      'google' => [ 
       'class' => 'yii\authclient\clients\GoogleOpenId' 
      ], 
      'facebook' => [ 
       'class' => 'yii\authclient\clients\Facebook', 
       'clientId' => 'facebook_client_id', 
       'clientSecret' => 'facebook_client_secret', 
      ], 
      // etc. 
     ], 
    ] 
    ... 
] 

predefinito: Yii2 authclient supporta alcuni OpenID, OAuth, erogatori OAuth2:

  • [[\ Yii \ authclient \ clienti \ Facebook | Facebook ]].
  • [[yii \ authclient \ clients \ GitHub | GitHub]].
  • Google (tramite [[yii \ authclient \ clients \ GoogleOpenId | OpenID]] e [[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 (tramite [[yii \ authclient \ clients \ YandexOpenId | OpenID]] e [[yii \ authclient \ clients \ YandexOAuth | OAuth]]).

C'è pronto per l'uso [[Yii \ authclient \ widget \ AuthChoice]] widget di utilizzare nelle viste:

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

Per di più informazioni: https://github.com/yiisoft/yii2-authclient/tree/master/docs/guide

Goodluck e buon divertimento!