2016-05-29 17 views
-1

私はFacebookのログインをしようとしていますが、姓と名字のようなユーザーの詳細情報を取得したいと考えています。Facebookのログイン情報の詳細を得るには

これは私がやっているものです:

.factory('Auth', function($http, $location, $rootScope, $alert, $window) { 

    var token = $window.localStorage.token; 
    if (token) { 
     var payload = JSON.parse($window.atob(token.split('.')[1])); 
     $rootScope.currentUser = payload.user; 
    } 

    // Asynchronously initialize Facebook SDK 
    $window.fbAsyncInit = function() { 
     FB.init({ 
     appId : '1234567890', 
     responseType : 'token', 
     status : true, 
     cookie : true, 
     xfbml : true, 
     version : 'v2.4' 
     }); 
    }; 

    // Asynchronously load Facebook SDK 
    (function(d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) { 
     return; 
     } 
     js = d.createElement(s); 
     js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    return { 
     facebookLogin: function() { 
     FB.login(function(response) { 
      FB.api('/me', function(profile) { 
      var data = { 
       signedRequest: response.authResponse.signedRequest, 
       profile: profile 
      }; 

      $http.post('/auth/facebook', data).success(function(token) { 
       var payload = JSON.parse($window.atob(token.split('.')[1])); 
       $window.localStorage.token = token; 
       $rootScope.currentUser = payload.user; 
       console.log('profile', payload); 
       $location.path('/'); 
      }); 
      }); 
     }, { scope: 'email, public_profile' }); 
     } 
    }; 
}); 

を私は何を私が手にすると、この

{ 
    "authResponse": { 
    "accessToken": "EAAI3lCeCXL", 
    "userID": "1062220283817044", 
    "expiresIn": 6886, 
    "signedRequest": "oVzEDRHPz4e3ammGG" 
    }, 
    "status": "connected" 
} 

、その後のポストがあった呼んで

FB.login(function(response) {...} 

関数を呼び出すとき実施した

 $http.post('/auth/facebook', data).success(function(token) { 
      var payload = JSON.parse($window.atob(token.split('.')[1])); 
      $window.localStorage.token = token; 
      $rootScope.currentUser = payload.user; 
      console.log(angular.toJson($rootScope.currentUser, 'pretty')); 
      $location.path('/'); 

     }); 

私はここに、この

{ 
    "user": { 
    "__v": 0, 
    "name": "Marcelo Retana", 
    "_id": "574b5b48d6742c401106c3f9", 
    "facebook": { 
     "id": "1062220283817044" 
    } 
    }, 
    "iat": 1464556360470, 
    "exp": 1465161160470 
} 

を取得するノードの一部は、念のためです:だから

app.post('/auth/facebook', function(req, res, next) { 
    var profile = req.body.profile; 
    var signedRequest = req.body.signedRequest; 
    var encodedSignature = signedRequest.split('.')[0]; 
    var payload = signedRequest.split('.')[1]; 

    var appSecret = '1234567890'; 

    var expectedSignature = crypto.createHmac('sha256', appSecret).update(payload).digest('base64'); 
    expectedSignature = expectedSignature.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 

    User.findOne({ facebook: profile.id }, function(err, existingUser) { 
    if (existingUser) { 
     var token = createJwtToken(existingUser); 
     return res.send(token); 
    } 
    var user = new User({ 
     name: profile.name, 
     facebook: { 
     id: profile.id, 
     email: profile.email 
     } 
    }); 
    user.save(function(err) { 
     if (err) return next(err); 
     var token = createJwtToken(user); 
     res.send(token); 
    }); 
    }); 
}); 

、任意の提案ですか?

答えて

1

あなたはちょうどあなたが取得したいフィールドを依頼する必要があります:https://developers.facebook.com/docs/apps/changelog#v2_4

:それは「宣言フィールド」と呼ばれ、グラフAPI v2.4デベロッパーに付属されて

FB.api('/me', {fields: 'name,first_name,last_name,picture,email'}, function(profile) { 
    ... 
}); 

関連する問題