2016-12-09 13 views
0

Jason Watmore's exampleに基づいて認証サービスを作成しました。AndroidのRippleエミュレータで正常に動作し、ログインしてjStorageにトークンを保存し、サービス。Androidの電話機でMoodleのアクセストークンを取得できません

昨日まで、実際のAndroid搭載端末でも動作していました。

jStorageがAndroid搭載の携帯電話で動作しているかどうかを確認しましたが、設定を使用してすべてのアプリケーションのデータを削除しようとしました。

Androidの携帯電話がMoodleサーバーからトークンを取得していない理由は何ですか(ただし、エミュレータです)。

myApp.factory('AuthenticationService', 
    ['$http', '$cookies', '$rootScope', '$timeout', '$log', 
    function ($http, $cookies, $rootScope, $timeout, $log) { 
     var service = {}; 

     service.Login = function (username, password, callback) { 

      //$log.info('Login function called'); 

      if ((username.length && password.length) && (username !== '' && password != '')) { 

       var loginUrl = 'https://my.moodle.url/local/token.php'; 

       // use $.param jQuery function to serialize data from JSON 
       var data = $.param({ 
        username: username, 
        password: password, 
        service: 'brookesid_ws' 
       }); 
       //$log.info(data); 
       var config = { 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' 
        } 
       } 

       $http.post(loginUrl, data, config) 
         .success(function (data, status, headers, config) { 
          $log.info(data); 
          myToken = data.token; 
          dataString = JSON.stringify(data); 
          if (dataString.indexOf('error') > 0) { 

           $rootScope.className = 'error'; 
           $rootScope.PostDataResponse = 'Invalid user credentials, please try again'; 
           $rootScope.isAuthenticated = false; 
           $rootScope.dataLoading = false; 
          } 
          else { 
           $.jStorage.set('session', myToken, { TTL: 28800000 }); 
           //$cookies.put('session', myToken); 
          } 

          $rootScope.isAuthenticated = true; 
          // $log.info('isAuthenticated = true'); 
          callback(dataString); 
         }) 
         .error(function (data, status, header, config) { 
          $rootScope.isAuthenticated = false; 
          $rootScope.ResponseDetails = "data: " + data + 
            "<br />status: " + status + 
            "<br />headers: " + header + 
            "<br />config: " + config; 
          responsedata = JSON.stringify(data); 
          callback(responsedata); 
          $log.info('error: '+responsedata); 
         }); 
      } else { 

       $rootScope.className = 'error'; 
       $rootScope.isAuthenticated = false; 
       $rootScope.PostDataResponse = 'Please enter a username and password'; 
      } 

     }; 

     service.SetCredentials = function (sessionToken) { 

      var JSONObject = JSON.parse(sessionToken); 
      var key = 'token'; 
      myToken = JSONObject[key]; 
      $log.info('session Token: ' + sessionToken); 
      $log.info('myToken: ' + myToken); 
      $rootScope.globals = { 
       currentUser: { 
        token: myToken 
       } 
      }; 

      $http.defaults.headers.common['Authorization'] = 'Basic ' + sessionToken; // jshint ignore:line 

      //retrieve last login date and then update it 
      $rootScope.lastLogin = $.jStorage.get('lastLogin', ''); 
      var today = new Date(); 
      epochToday = Math.round(today.getTime()/1000); 
      $.jStorage.set('lastLogin', epochToday, { TTL: 28800000 }); 
      //$log.info('Rootscope Last Login: '+$rootScope.lastLogin); 

      $.jStorage.set('globals', $rootScope.globals, { TTL: 28800000 }); 
      $.jStorage.set('session', myToken, { TTL: 28800000 }); 
      $.jStorage.set('loginStatus', 'logged in', { TTL: 28800000 }); 

      $log.info('Token (jStorage) ' + $.jStorage.get('session', '')); 
      //$log.info('Last login (jStorage) ' + $.jStorage.get('lastLogin', '')); 
      //$log.info('Login status (jStorage) ' + $.jStorage.get('loginStatus', '')); 
     }; 

     service.ClearCredentials = function() { 
      $rootScope.globals = {}; 
      //$cookies.remove('globals'); 
      //$cookies.remove('session'); 
      $.jStorage.deleteKey('globals'); 
      $.jStorage.deleteKey('session'); 
      $http.defaults.headers.common.Authorization = 'Basic '; 
     }; 

     return service; 
    }]) 

はここに私のログインコントローラである:

は、ここに私のサービスですそれは実際にいた

.controller('loginCtrl', 
['$scope', '$rootScope', '$location', 'AuthenticationService', '$routeParams', '$http', 
function ($scope, $rootScope, $location, AuthenticationService, $routeParams, $http) { 

    $scope.login = function() { 
     $scope.dataLoading = true; 
     AuthenticationService.Login($scope.username, $scope.password, function (response) { 
      responsedata = JSON.stringify(response); 
      /* error handling*/ 
      if (responsedata.indexOf('error') > 0 || responsedata.indexOf('invalid') > 0) { 
       $scope.error = response.message; 
       $rootScope.className = 'error'; 
       $rootScope.dataLoading = false; 

      } else { 
       AuthenticationService.SetCredentials(response); 
       console.log('response: '+response); 
       $location.path('/home'); 
      }; 

     }); 
    }; 

    $scope.logout = function() { 
     $rootScope.dataLoading = false; 
     $rootScope.hideMe = true; 
     $rootScope.PostDataResponse = ''; 
     $rootScope.ResponseDetails = ''; 
     //alert('logging out'); 
     AuthenticationService.ClearCredentials(); 
    }; 

    $scope.showMenuPanel = function() { 
     $scope.hideMenuPanel = false; 
    }; 

    $scope.doHideMenuPanel = function() { 
     $scope.hideMenuPanel = true; 
     $rootScope.PostDataResponse = ''; 
    }; 
}]) 

答えて

関連する問題