前提・実現したいこと
Facebook APIを利用したFBログインの初回ログインで、1名だけプロフィール情報の取得で不具合があり、原因を突き止めたい
発生している問題
新規登録のユーザーで、プロフィールのメールアドレス情報などは取得できているにも関わらず、名前だけ取得できないユーザーがいました。
ほぼ同じ時間帯に登録した他のユーザーでは、そういった現象が起きていません
名前を取得できなかったユーザーの他のプロフィール情報は取得できていることから、通信の問題という線は考えにくく、他のユーザーでは全ての情報を取得できていることから、取得方法が変わった訳でもないと思います
アクセス制限がかかる情報ではないはずなので、発生原因の説明ができません
お客さんに何らかの回答をしたいのですが、どのように調査すればいいかもわからずにいます
ユーザー名が変更された場合は、再度このシステムにログインすることで更新がかかります
このような場合、APIとの通信で何かしらの問題があったようですが、ユーザーがログインすれば更新されるため問題ないという回答になりますでしょうか?
みなさんだったらどうされますか?
まさか半角・全角スペースだけでFBのアカウント登録できるのかと試してみたのですが流石に違いました
このユーザーでしか起きてないことで、再現方法もわからないのですが何か似たような不具合をみたことがある方がいれば教えていただきたいです
該当のソースコード
FBの公式で紹介されていたPHPでのFBログインのコールバック関数の書き方ほぼそのままのコードを使い、プロフィール情報を取得しています
try { // Returns a `Facebook\FacebookResponse` object $response = $facebook->get('/me?locale=ja_JP&fields=id,name,email,birthday,age_range,gender,locale,picture.type(large).redirect(0),cover,link', $facebook__accessToken->getValue()); } catch (Facebook\Exceptions\FacebookResponseException $e) { $flashMessage = __('Graph returned an error: ') . $e->getMessage(); $this->Flash->error($flashMessage); return $this->redirect($this->errorRedirectUrl); } catch (Facebook\Exceptions\FacebookSDKException $e) { $flashMessage = __('Facebook SDK returned an error: ') . $e->getMessage(); $this->Flash->error($flashMessage); return $this->redirect($this->errorRedirectUrl); } // UserData $facebook__user = $response->getGraphUser(); if (empty($facebook__user)) { $flashMessage = __('Could not get user information.'); $this->Flash->error($flashMessage); return $this->redirect($this->errorRedirectUrl); } // User is logged in with a long-lived access token. // You can redirect them to a members-only page. $facebookAccessTokenValue = $facebook__accessToken->getValue(); $facebookUserId = $facebook__user['id']; $facebookUserEmail = $facebook__user['email']; $facebookUserName = $facebook__user['name']; // Register or Update login -> // member $member = $this->Members->findByFacebookUserId($facebookUserId); if (empty($member)) { $member = $this->Members->newEntity(); $member->facebook_user_id = $facebookUserId; } $member->facebook_access_token = $facebookAccessTokenValue; $member->facebook_email = $facebookUserEmail; $member->facebook_name = $facebookUserName; if (!$this->Members->save($member)) { $this->Flash->error(__('Failed to login.')); return $this->redirect($this->errorRedirectUrl); } // user $user = $this->Users->findByMemberId($member->id); if (empty($user)) { $user = $this->Users->newEntity(); $user->id = $member->id; $user->facebook_user_id = $facebookUserId; $user->is_invalid = false; $user->deleted = null; $user->facebook_email = $facebookUserEmail; } $user->facebook_access_token = $facebookAccessTokenValue; $user->facebook_name = $facebookUserName; $user->last_logined = Time::now();
補足情報(FW/ツールのバージョンなど)
cakephp3.5
Facebook SDK for PHP5.6.1
あなたの回答
tips
プレビュー