Facebookとの接続にHWIOauthBundleを使用したWebサイト(Symfony2)があり、すべてが正常に機能しています。
現在、CordovaとIonicフレームワーク(AngularJS)を使用してiOSアプリを構築しようとしていますが、Facebookでユーザーを認証したいと思います。
を使用して$cordovaFacebook
、ユーザーを認証し、有効なFacebookアクセストークンを取得します。これで問題ありません。
このアクセストークンを使用して、サーバー側のユーザーをHWIOauthBundleで認証しようとしています。
GET http://..../login/facebook?code=MY_FACEBOOK_ACCESS_TOKEN
symfonyはこのログで私のリクエストを拒否します:
INFO - Matched route "facebook_login" (parameters: "_route": "facebook_login")
INFO - Authentication request failed: OAuth error: "Invalid verification code format."
だから私の質問は:Facebook接続でフロントエンドとバックエンドの両方でユーザーを認証するにはどうすればよいですか?
ありがとう:)
また、HWIOAuthBundleを使用してサーバー側のログインを実装する方法についても疑問に思っています。Webで解決策が見つからなかったため、ネットで読んだヒントに基づいて機能をコーディングしました。基本的に、あなたはしなければなりません:
これが私のSymfonyコントローラーです:
public function getSecurityFbAction($token)
{
// Get the token's FB app info.
@$tokenAppResp = file_get_contents('https://graph.facebook.com/app/?access_token='.$token);
if (!$tokenAppResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Make sure it's the correct app.
$tokenApp = json_decode($tokenAppResp, true);
if (!$tokenApp || !isset($tokenApp['id']) || $tokenApp['id'] != $this->container->getParameter('oauth.facebook.id')) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Get the token's FB user info.
@$tokenUserResp = file_get_contents('https://graph.facebook.com/me/?access_token='.$token);
if (!$tokenUserResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Try to fetch user by it's token ID, create it otherwise.
$tokenUser = json_decode($tokenUserResp, true);
if (!$tokenUser || !isset($tokenUser['id'])) {
throw new AccessDeniedHttpException('Bad credentials.');
}
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array('facebookId' => $tokenUser['id']));
if (!$user) {
// Create user and store its facebookID.
}
// Return the user's JSON web token for future app<->server communications.
}
アプリのログインエラーを処理するために、Symfony \ Component \ HttpKernel \ Exception \ AccessDeniedHttpException例外をスローします。
もちろん、あなたが本当にHTTPを使用する必要があり秒あなたは賢明な情報を交換することになるので。
それが最善の方法かどうかはわかりませんが、うまく機能します。それが役に立てば幸い !
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加