2015-10-21 11 views
8

Yii \ authclient \ AuthAction'ın successCallback uygulamasını deniyorum.Yii2'de AuthAction

Benim kod şöyle görünür:

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

nasıl successCallback çağırabilir? Kimlik doğrulama yöntemini aramak istiyorum. Ama bunu yapamıyorum?

+0

'$ externalUser-> login();' Oturum açma işlevini çağırmak istiyor ancak kullanıcı giriş yapmıyor mu? –

cevap

0

Büyük olasılıkla bu iyi çalışıyor, ancak auth eyleminin erişimine izin vermediniz. Denetleyicinizin davranışlarına auth izin verdiğinden emin olun. gibi bir şey: Bu successCallback çalışacak

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

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

    return $behaviors; 
} 
0

zaman Auth sunucu yanıtı başarılı. Sen authcollection (auth sunucusunun toplama yapılandırma) konfigürasyon dosyasında gerekir

'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. 
     ], 
    ] 
    ... 
] 

Varsayılan: Yii2 bazı Openid, oauth, OAuth2 sağlayıcı desteklemek authclient:

  • [[\ yii \ authclient müşteriler Facebook \ \ | Facebook ]].
  • [[yii \ authclient \ clients \ GitHub | GitHub]].
  • Google ([[yii \ authclient \ clients \ GoogleOpenId | OpenID]] ve [[yii \ authclient \ clients \ GoogleOAuth | OAuth]]) aracılığıyla.
  • [[yii \ authclient \ clients \ LinkedIn | LinkedIn]].
  • [[yii \ authclient \ clients \ Live | Microsoft Live]].
  • [[yii \ authclient \ clients \ Twitter | Twitter]].
  • [[yii \ authclient \ clients \ VKontakte | VKontakte]].
  • Yandex (via [[yii \ authclient \ clients \ YandexOpenId | OpenID]] ve [[yii \ authclient \ clients \ YandexOAuth | OAuth]]).

kullanıma hazır var [[yii \ authclient \ aletler \ AuthChoice]] Widget görünümlerinde kullanmak: Daha fazla bilgi edinmek için

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

: https://github.com/yiisoft/yii2-authclient/tree/master/docs/guide

Goodluck ve eğlenin!