如何区分YII2中的oauth社交媒体插件

时间:2016-01-08 02:28:56

标签: facebook twitter oauth yii2

我有一个使用twitter,facebook或google登录系统的网站。 我使用oAuth,这是我的代码。

配置

'authClientCollection' => [
              'class' => 'yii\authclient\Collection',
              'clients' => [
                'facebook' => [
                  'class' => 'yii\authclient\clients\Facebook',
                  'clientId' => 'asdsad',
                  'clientSecret' => 'xzxas',
                ],
            'twitter' => [
                'class'          => 'yii\authclient\clients\Twitter',
                'consumerKey'    => 'sadsd',
                'consumerSecret' => 'dasdasd',
            ],
          ],
        ],

控制器

public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
            'auth' => [
              'class' => 'yii\authclient\AuthAction',
              'successCallback' => [$this, 'oAuthSuccess'],
            ],
        ];
    }

    public function oAuthSuccess($client) {
      // get user data from client
      $userAttributes = $client->getUserAttributes();
      echo '<pre>';
      print_r($userAttributes);
      die;

问题是我如何知道用户使用哪种社交媒体登录系统?

2 个答案:

答案 0 :(得分:2)

要区分您的oauth客户端,您可以将一些实例条件设置为: -

public function oAuthSuccess($client) {
    $reponse = $client->getUserAttributes();

    $session = Yii::$app->session;

    $token = $client->accessToken->params['access_token'];

    $session->set('token' ,$token);
    $id = ArrayHelper::getValue($reponse , 'id');
    $session->set('auth_id', $id);
    //Facebook Oauth
    if($client instanceof \yii\authclient\clients\Facebook){

        //Do Facebook Login

    }
    //Google Oauth
    elseif($client instanceof \yii\authclient\clients\GoogleOAuth){
        //Do Google Login Condition

    }


}

答案 1 :(得分:1)

public function oAuthSuccess($client) {
  // get user data from client
  $userAttributes = $client->getUserAttributes();
  if($client->getName() == 'twitter'){
     ........
  }else if($client->getName() == 'facebook'){
     .........
  }