Я пытаюсь создать гибридное мобильное приложение с ионным (угловым). Для этого приложения я делаю вызов oAuth, который зависит от jQuery, поэтому загружаются обе библиотеки, а также скрипт для oAuth и моего и моего приложения.
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="cordova.js"></script>
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/auth.js"></script>
<script src="js/app.js"></script>
Вызов, чтобы инициировать проверку подлинности осуществляется в ионном готовом событии в app.js, как показано ниже:
функция$ionicPlatform.ready(function(){
oAuthProcess.authorize({
client_id: 'client',
client_secret: 'secret',
scope: 'scope',
redirect_uri: 'fake url'
}).done(function(data){
localStorage.setItem('accessToken', data.access_token);
localStorage.setItem('refreshToken', data.refresh_token);
var accessToken = localStorage.getItem("accessToken");
alert(accessToken);
}).fail(function(data){alert(data.error);});
});
oAuthProcess находится в файле auth.js, который выглядит, как показано ниже. Он открывает inAppBrowser выполнить аутентификацию, а затем следует закрыть его возвращение маркера доступа к приложению, чтобы призывающие API:
var oAuthProcess = {
authorize: function(options) {
var deferred = $.Deferred();
var authUrl = 'some url' + $.param({
client_id: options.client_id,
redirect_uri: options.redirect_uri,
response_type: 'code',
scope: options.scope
});
//Open inAppBrowser with authUrl
var authWindow = window.open(authUrl, '_blank', 'location=no,toolbar=no');
authWindow.addEventListener('loadstart', function(e) {
var url = '' + e.url + '';
//Upon opening in
var code = url.match(/\?code=(.+)$/);
var error = url.match(/\?error=(.+)$/);
if (code != null || error != null) {
authWindow.close();
}
if (code) {
$http({
method: 'POST',
url: 'some url',
data: {code: code[1], client_id: options.client_id, client_secret: options.client_secret, redirect_uri: options.redirect_uri, grant_type: 'authorization_code'}
}).success(function(data) {
deferred.resolve(data);
}).error(function(data){
deferred.reject(response.responseJSON);
});
} else if (error) {
deferred.reject({
error: error[1]
});
}
});
return deferred.promise();
}
};
Приложение может загружать inAppBrowser и создавать токен, однако предоставляется следующая ошибка, которая останавливает токен от возврата в приложение после закрытия inAppBrowser.
2015-01-09 16: 48: 04,299 MYAPP [2146: 483400] Ошибка успеха callbackId: InAppBrowser85303841: ReferenceError: Не удается найти переменную: $ HTTP
Любая помощь решению этого или альтернативный подход будет очень признателен.
Заранее спасибо.
'$ http' не является чем-то, что отображается на глобальном объекте. Вам нужно будет использовать инъекцию зависимостей для доступа к ней. Если вы делаете это в глобальном контексте, вам нужно будет получить доступ к '$ http' из' $ injector'. – PSL
@PSL благодарит за быстрый ответ. Не могли бы вы объяснить, как я могу это сделать? Я очень новичок в угловом – Peeks
Вы можете получить экземпляр http, выполнив 'var $ http = angular.injector (['ng']). Get ('$ http')' при условии, что у вас есть угловая загрузка. Также я не понимаю, в чем смысл возврата обещания от анонимного обработчика событий. – PSL