2015-10-21 21 views
8

Tôi đang cố gắng triển khai thành công của yii \ authclient \ AuthActionCallback.Tự động tác vụ trong yii2

Mã của tôi trông như thế này:

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

Làm thế nào tôi có thể gọi successCallback? Tôi muốn gọi phương thức xác thực. Nhưng tôi không thể làm điều này?

+0

'$ externalUser-> login();' Bạn muốn gọi chức năng đăng nhập nhưng người dùng không đăng nhập? –

Trả lời

0

Rất có thể điều này đang hoạt động tốt, nhưng bạn không cho phép hành động của auth được truy cập. Đảm bảo bạn cho phép auth trong hành vi của bộ điều khiển của bạn. Một cái gì đó như:

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

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

    return $behaviors; 
} 
0

Nó sẽ chạy successCallback khi phản hồi của máy chủ Auth thành công. Bạn phải cấu hình authcollection (bộ sưu tập cấu hình của máy chủ auth)

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

Mặc định: Yii2 authclient hỗ trợ một số openid, oauth, nhà cung cấp OAuth2:

  • [[\ yii \ authclient \ client \ Facebook | Facebook ]].
  • [[yii \ authclient \ clients \ GitHub | GitHub]].
  • Google (qua [[yii \ authclient \ clients \ GoogleOpenId | OpenID]] và [[yii \ authclient \ clients \ GoogleOAuth | OAuth]]).
  • [[yii \ authclient \ clients \ LinkedIn | LinkedIn]].
  • [[yii \ authclient \ clients \ Trực tiếp | Microsoft Live]].
  • [[yii \ authclient \ clients \ Twitter | Twitter]].
  • [[yii \ authclient \ clients \ VKontakte | VKontakte]].
  • Yandex (thông qua [[yii \ authclient \ clients \ YandexOpenId | OpenID]] và [[yii \ authclient \ clients \ YandexOAuth | OAuth]]).

Có sẵn sàng để sử dụng [[yii \ authclient \ widgets \ AuthChoice]] phụ tùng để sử dụng trong quan điểm:

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

Đối biết thêm thông tin: https://github.com/yiisoft/yii2-authclient/tree/master/docs/guide

Goodluck và vui chơi!

Các vấn đề liên quan