My sequence for the login is:
1- get FB token
2- create local/user
3- register FB token (same token received from Facebook : “CAAHArxqPE7QBANt1SrDTUykm2ifCoQrZBmfXLebqDs3Gz9ZBb0nUSyHnq2k984QBMuTaQehVezl2ojm…”)
4- receive ok from server:
"fbtoken res: {“email”:“luca.palezza@gmail.com”,“ok”:“registered”}"
4- create user profile in the database
5- replicate DB with response: {“session_id”:“repl002”}
All this seems to run smoothly, because I can see from the Sync_Gateway log that the correct user is logging in:
2015-09-24T16:49:46.731+02:00 HTTP: #278: POST /diveplanapp/_facebook
2015-09-24T16:49:46.762+02:00 HTTP: #279: GET /diveplanapp/_changes?feed=websocket
2015-09-24T16:49:46.888+02:00 HTTP: #280: GET /diveplanapp/_local/c149075c580f7049112e5767d1db24a77acc58a8 (as luca.palezza@gmail.com)
2015-09-24T16:49:46.899+02:00 HTTP: #280: --> 404 missing (11.4 ms)
2015-09-24T16:49:46.936+02:00 HTTP: #281: POST /diveplanapp/_bulk_get?revs=true&attachments=true
2015-09-24T16:49:46.937+02:00 HTTP: #282: POST /diveplanapp/_revs_diff (as luca.palezza@gmail.com)
2015-09-24T16:49:47.009+02:00 HTTP: #283: POST /diveplanapp/_bulk_get?revs=true&attachments=true
2015-09-24T16:49:47.011+02:00 HTTP: #284: POST /diveplanapp/_bulk_get?revs=true&attachments=true
The problem is that all the bulk_get do not come from the same user, but from a GUEST, so I cannot receive the correct data from the server.
I add also my login code for your reference:
checkUser: function() {
var deferred = $q.defer();
var _this = this
//check if user is already registered in the database
divePlanDatabase.getLocalDocument("user").then(function(local_user) {
log("local_user",local_user)
deferred.resolve(local_user);
//register new token
}, function(err){
log("local_user non existing",err)
//create user
divePlanDatabase.createLocalDocument("user",_this.user).then(function(result) {
log("local_user",result,_this.user)
// Document created successfully
//create user profile
_this.registerFacebookToken().then(function(ok) {
log("fbtoken res",JSON.stringify(ok))
_this.createMyProfile().then(function(profile) {
log("profile created",JSON.stringify(profile))
deferred.resolve(profile);
}, function(error) {
// There was an error replicating to the local device
log("createMyProfile error",error)
deferred.reject(error);
});
}, function(error) {
// There was an error replicating to the local device
log("registerFacebookToken error",error)
deferred.reject(error);
});
}, function(error) {
// Document creation
log("local_user error",error)
deferred.reject(error);
});
});
return deferred.promise;
},
createMyProfile : function() {
var _this = this
//log("createMyProfile user "+JSON.stringify(config.user))
var profileData = angular.copy(_this.user)
profileData.type = "profile"
profileData.user_id = profileData.email
delete profileData.email
//log("createMyProfile", profileData)
return divePlanDatabase.updateDocument("p:"+profileData.user_id, profileData)
},
registerFacebookToken : function() {
var _this = this
var registerData = {
remote_url : _this.REMOTE_SERVER,
email : _this.user.email,
access_token : _this.user.access_token
}
log("registerFacebookToken",registerData)
return divePlanDatabase.updateFBToken(registerData)
},
replicateDatabase: function() {
var deferred = $q.defer();
var _this = this
//replicate local to remote
var remote = {
url : _this.REMOTE_URL
}
if (_this.user && _this.user.email) {
remote.auth = {facebook : {email : _this.user.email}}
}
log("remote",remote)
divePlanDatabase.replicate(_this.databaseName, remote , true).then(function(result1) {
log("replicate local to remote",_this.databaseName, remote,result1)
//replicate remote to local
divePlanDatabase.replicate(_this.REMOTE_URL, _this.databaseName, true).then(function(result2) {
log("replicate remote to local",result2)
deferred.resolve(result2);
}, function(error) {
// There was an error replicating to the local device
log("replicate error",error)
deferred.reject(error);
});
}, function(error) {
// There was an error replicating to the Sync Gateway
log("replicate error",error)
deferred.reject(error);
});
return deferred.promise;
},
guestLogin: function(user) {
var _this = this
if (user) {
//existing guest logi
_this.user = user
guestReplicate()
} else {
//new guest login
_this.user = {
guest: true
}
divePlanDatabase.createLocalDocument("user",_this.user).then(function(result) {
log("guest_user",result)
guestReplicate()
}, function(error) {
// Document creation
log("guest_user error",error)
});
}
function guestReplicate() {
_this.replicateDatabase().then(function(ok){
log("replicateDatabase guest",ok)
$state.go('app.sites')
}, function(err){
log("replicateDatabase guest err",err)
})
}
},
login: function() {
var _this = this
/*
Get user email address from Facebook, and access code to verify on Sync Gateway
*/
var result = JSON.parse(window.localStorage.getItem('ionFB_user'))
_this.user = result.profileInfo
_this.user.access_token = result.authResponse.accessToken;
_this.user.user_id= _this.user.email
log("login",_this.user)
//check and ask user email
if (!_this.user.email) {
_this.requireEmail()
} else {
_this.checkUser().then(function(res){
log("checkUser OK",JSON.stringify(res))
//replicated DB
_this.replicateDatabase().then(function(ok){
log("replicateDatabase",ok)
$state.go('app.sites')
}, function(err){
log("replicateDatabase err",err)
})
}, function(err){
log("checkUser err",err)
})
}
}
Thank you very much for your support.
Luca