-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);
});
});
});
、任意の提案ですか?