当前位置: 首页 > 知识库问答 >
问题:

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

翁烨霖
2023-03-14

我有一个网站,使用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个答案

雷献
2023-03-14
public function oAuthSuccess($client) {
  // get user data from client
  $userAttributes = $client->getUserAttributes();
  if($client->getName() == 'twitter'){
     ........
  }else if($client->getName() == 'facebook'){
     .........
  }
丁安宜
2023-03-14

要区分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

    }


}
 类似资料:
  • 因此,我想创建一种社交媒体应用程序,并使用fiRest作为主数据库。 目标是创建“facebook”新闻源。 每个用户都有一个朋友列表,每个用户都可以创建帖子。 每个帖子都可以被修改为对应用程序的所有用户或用户朋友可见。所以每个用户都可以向他所有的朋友发布帖子,并向应用程序中的每个人发布帖子。 此外,用户还可以在新闻提要中“保存”他们喜欢的帖子。(类似帖子子集合) 现在在用户的新闻提要中-我如何查

  • 我有一个集合,我的应用程序在其中存储用户的所有帖子,数据结构如下: 现在,我想向我的用户显示这个集合的所有帖子;但是,只有当用户跟随创建帖子的人时,即帖子文档的字段适合。 我知道如果用户只关注一个人,查询集合是很简单的,也就是说,我有一个简单的子句。但是:如果我的用户关注10,000人或更多人呢?我怎么查询呢? 另外,我应该如何存储,即用户跟随的人?使用简单的数组似乎不适合我,但是使用所有其他选项

  • 考虑instagram提要场景。我想让我关注的人“发布”所有帖子。对于每一个帖子,我都想知道我是否喜欢它,还想知道我关注的其他人中有谁喜欢它(如果有的话)。在gremlin中实现这一点的最佳解决方案是什么(可能避免重复)? 图像清晰 下面只给出了用户2“发布”的帖子。如何在同一查询中获取其他信息?

  • Bluemix;节点。js;SSO;CWOA0062E 此时的URL是:https://mzsso-yyyyyyyyyyyy.iam.ibmcloud.com/idaas/oidc/endpoint/default/authorize?response_type=code (请注意,xxxxx、yyyy、zzzzz等是我的屏蔽私有标识符。。。 1)错误消息:CWOAU0062E:OAuth服务提供

  • 这可能是一个相当开放的问题,但我需要发布到各种社交媒体网站,如facebook,twitter,领英,谷歌等。现在请记住,这是一个真正的帖子,而不仅仅是一个共享-换句话说,我已经通过OAuth存储了用户凭据,并将在他们的墙上制作一个格式化的帖子,提要等。 问:有没有什么方法可以让我在各种社交媒体上准确或非常接近地预览这篇文章?例如,在用户发布帖子之前,我可以向他们展示他们在facebook或谷歌上

  • 当用户导航到Likes或Comments屏幕时,他/她将分别看到用户指定帖子的Likes或Comments列表。 用这种结构能正确处理这两种情况吗?或者将评论和喜欢集合放在/posts/{userId}/userposts/{postId}/(也可以作为子集合)中会更好 Firestore可以同时执行“多个集合查询”吗?以便在我的“交互”屏幕中,我可以从按日期排序的不同集合中获取所需的数据 我很感