【问题标题】:getNickname() returns null even for a found facebook user即使是找到的 facebook 用户,getNickname() 也会返回 null
【发布时间】:2014-05-27 22:26:39
【问题描述】:

我正在尝试在 HWIOAuthBundle 中实现 public function loadUserByOAuthUserResponse(UserResponseInterface $response) 方法。当用户登录他的 Facebook 帐户时,我注意到 getNickname() 始终返回 null,即使它是为该用户指定的。

这正常吗?

public function loadUserByOAuthUserResponse(UserResponseInterface $response) {

    $username = $response->getUsername();
    $nickname= $response->getNickname(); // it returns always null
    //$user = $this->userManager->findUserBy(array($this->getProperty($response) => $username));
    $user = $this->userManager->findUserBy(array("email" => $response->getEmail()));
    $attr = $response->getResponse();


    //when the user is registrating
    if (null === $user) {
        // init some setter functions
        $service = $response->getResourceOwner()->getName();
        $setter = 'set' . ucfirst($service);
        $setter_id = $setter . 'Id';
        $setter_token = $setter . 'AccessToken';

        // create new user here indepently of which service we are using!
        $user = $this->userManager->createUser();
        $user->$setter_id($username);
        $user->$setter_token($response->getAccessToken());

        $user->setUsername($response->getUsername());
        //$user->setUsernameCanonical($response->getNickname());
        $user->setEmail($response->getEmail());
        $user->setEmailCanonical($response->getEmail());


        switch ($service) {
            case 'facebook':
                if (isset($attr['gender'])) {
                    if ($attr['gender'] == 'male')
                        $user->setGender(true);
                    else
                        $user->setGender(false);
                }
                if (isset($attr['first_name'])) {
                    $user->setName($attr['first_name']);
                }
                if (isset($attr['last_name'])) {
                    $user->setFamilyname($attr['last_name']);
                }
                if (isset($attr['location'])) {
                    if (isset($attr['location']['name'])) {
                        if ($attr['location']['name']) {
                            $user->setLocation($attr['location']['name']);
                        }
                    }
                }
                if (isset($attr['hometown'])) {
                    if (isset($attr['hometown']['name'])) {
                        if ($attr['hometown']['name']) {
                            $user->setHometown($attr['hometown']['name']);
                        }
                    }
                }
                if (isset($attr['birthday'])) {
                    $user->setBirthday(new \DateTime($attr['birthday']));
                }
                if ($nickname) {
                    $user->setPassword("aa" . $nickname);
                }else $user->setPassword($attr['name']);
                break;
            case 'google':
                // not ready yet!
                break;
        }
        $user->setAccept(true);
        $user->setEnabled(true);

        // update the user here
        $this->userManager->updateUser($user);
        return $user;
    }

    //if user exists - go with the HWIOAuth way
    $user = parent::loadUserByOAuthUserResponse($response);

    $serviceName = $response->getResourceOwner()->getName();
    $setter = 'set' . ucfirst($serviceName) . 'AccessToken';

    //update access token
    $user->$setter($response->getAccessToken());

    return $user;
}

【问题讨论】:

    标签: facebook symfony oauth facebook-oauth hwioauthbundle


    【解决方案1】:

    看看我在Omniauth-facebook hash not showing Facebook 'username' field, using rails 3的回答是关于另一种语言/库的,但是后面失败的原因是一样的。

    错误在这里:https://github.com/hwi/HWIOAuthBundle/blob/master/OAuth/ResourceOwner/FacebookResourceOwner.php#L29

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2016-07-07
      • 2020-09-26
      • 2016-08-05
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多