0 Ich bin nicht in der Lage, herauszufinden, was ich mit meinem Code verwenden und wie man Versprechungen verwenden soll. mit meinen $ http Anrufen.
Ich habe folgende Funktionen
erste i
$scope.getAcessToken()
anrufen möchten, und sobald ich das Zugriffstoken bekommen würde ich den folgenden Aufruf
$scope.getDataSets(lastSaved, cTime, accessToken)
Die beiden Funktionen machen werden wie folgt:
$scope.getAcessToken = function()
{
alert("inside getAcessToken function");
refreshToken = localStorage.getItem("refreshToken");
if(refreshToken)
{
$http({
method: "post", url: "https://accounts.google.com/o/oauth2/token",
data: "client_secret=" + clientSecret + "&grant_type=refresh_token" + "&refresh_token="+ refreshToken + "&client_id=" + clientId
})
.success(function(data){
accessToken = data.access_token;
})
.error(function(data,status){
alert("ERROR: " + JSON.stringify(data) + status);
});
}
else
{
$scope.firstTimeAuth();
}
return accessToken;
}
und
$scope.getDataSets = function(startTime, endTime, accessToken,)
{
$scope.a = "inside dataSets function";
$url = "https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.step_count.delta:com.google.android.gms:estimated_steps/datasets/" + startTime +"000000"+"-"+ endTime + "000000";
alert("acess token is " + accessToken);
if(accessToken != "")
{
$http({method: 'GET', url: $url,
headers: {'Authorization': 'OAuth ' + accessToken},
})
.success(function(response){
alert("inside success block datasets");
$scope.handleResponse(response);
})
.error(function(response) {
alert("Something went wrong" + JSON.stringify(response));
});
}
else
{
alert("no access token received");
}
}
So wird erhalten Datensätze ausgeführt, bevor ich tatsächlich bekommen das Zugriffstoken , wie es zu verhindern ?? EDIT 1:
$scope.firstTimeAuth = function(callback) {
var ref = window.open('https://accounts.google.com/o/oauth2/auth?client_id=' + clientId + '&redirect_uri=http://localhost/callback&scope=https://www.googleapis.com/auth/fitness.activity.write &approval_prompt=force&response_type=code&access_type=offline', '_blank', 'location=no');
ref.addEventListener('loadstart', function(event) {
if((event.url).startsWith("http://localhost/callback")) {
requestToken = (event.url).split("code=")[1];
$http({
method: "post", url: "https://accounts.google.com/o/oauth2/token",
data: "client_id=" + clientId + "&client_secret=" + clientSecret + "&redirect_uri=http://localhost/callback" + "&grant_type=authorization_code" + "&code=" + requestToken
})
.success(function(data) {
accessToken = data.access_token;
refreshToken = data.refresh_token;
if(typeof(Storage) != "undefined") {
localStorage.setItem("refreshToken", refreshToken);
alert(localStorage.getItem("refreshToken"));
} else {
alert("Sorry, your browser does not support Web Storage...");
}
//$location.path("/secure");
})
.error(function(data, status) {
alert("ERROR: " + data);
});
ref.close();
}
});
callback();
}
Sie gehen zu müssen, um die Versprechen der Anruf auf $ http erzeugt zurückkehren, könnten Sie den Code für das hinzufügen 'firstTimeAuth' Funktion – phuzi
In einem anderen Hinweis, sollten Sie wirklich weg von der Verwendung der" Erfolg "und" Fehler "Legacy-Versprechen Methoden, wie sie sind [veraltet] (https://docs.angularjs.org/api/ng/ service/$ http # deprecation-notice) – phuzi
okay, ich bin ziemlich neu in diesem .. so war nicht sicher, was man anstelle von Erfolg Block verwenden. erstmalige Auth ist eine Funktion ähnlich getaccessToken es hat auch einen $ http Anruf. Wie auch immer, ich füge es hinzu – Shravan