2017-02-09 3 views
0

Ich benutze Angular mit JWT-Token, um die Benutzer zu authentifizieren.Angular Login/Logout-Funktion nicht

Aber ich bin ein Problem, dass login(), die $scope zugewiesen ist, nicht aufgerufen wird. Jede Hilfe wäre willkommen.

app.js Datei

var admin = angular.module('admin',['admin.core','admin.auth']); 
angular.module('admin.core', ['ui.router','satellizer','ngResource','ngAnimate', 
'ngStorage']); 

admin.config(function($httpProvider, $stateProvider, $urlRouterProvider, 
$authProvider, $provide, $locationProvider) { 
    $authProvider.loginUrl = '/api/authenticate'; 
$urlRouterProvider.otherwise('/login'); 

$locationProvider.html5Mode(true); 

$stateProvider 
    .state('login', { 
     url: '/login', 
     templateUrl: '/partials/admin/login.html', 
     title : 'Admin Login' 
    }) 
}); 

angular.module("admin.auth", []).controller("AuthController",AuthController); 
function AuthController($auth, $state, $http, $rootScope, $scope) { 
    console.log("Auth Called"); 
    $scope.email=''; 
    $scope.password=''; 
    $scope.newUser={}; 
    $scope.loginError=false; 
    $scope.loginErrorText=''; 

    $scope.login = function() { 

    var credentials = { 
     email: $scope.email, 
     password: $scope.password 
    } 

    $auth.login(credentials).then(function() { 
     return $http.get('/api/authenticate/user'); 
    }, function(error) { 
     $scope.loginError = true; 
     $scope.loginErrorText = error.data.error; 
    }).then(function(response) { 
     if(typeof response != "undefined"){ 
      var user = JSON.stringify(response.data.user); 
      localStorage.setItem('user', user); 
      $rootScope.authenticated = true; 
      $rootScope.currentUser = response.data.user; 
      $scope.loginError = false; 
      $scope.loginErrorText = ''; 
      $state.go('dashboard'); 
     } 
    }); 
} 

    $scope.logout = function() { 
    $auth.logout().then(function() { 
     // Remove the authenticated user from local storage 
     localStorage.removeItem('user'); 
     // Flip authenticated to false so that we no longer 
     // show UI elements dependant on the user being logged in 
     $rootScope.authenticated = false; 
     // Remove the current user info from rootscope 
     $rootScope.currentUser = null; 
     $state.go('login'); 
    }); 
} 
} 

Und ich versuche AuthConrtoller wie als

<body ng-controller="AuthController"> 
    <ui-view></ui-view> 
</body> 

und login.html ist

<form name="loginForm" autocomplete="off" novalidate> 
    <md-input-container class="md-block"> 
    <label for="email">Username</label> 
    <input type="text" name="email" required="required" ng-model="email" md-no-asterisk/> 
    <div ng-messages="loginForm.email.$error" role="alert"> 
     <div ng-message="required">Username is required</div> 
     </div> 
    </md-input-container> 
     <md-input-container class="md-block"> 
     <label for="password">Password</label> 
     <input type="password" name="password" required="required" ng-model="password" md-no-asterisk/> 
     <div ng-messages="loginForm.password.$error" role="alert"> 
      <div ng-message="required">Password can not be blank</div> 
     </div> 
    </md-input-container> 
     <md-button type="submit" class="md-primary md-raised" ng-disabled="!loginForm.$valid" ng-click="login()">Login</md-button> 
</form> 
+0

wo das Login genannt? Fügen Sie den Code – Sajeetharan

+0

aktualisiert Login html sowie – Gags

+0

Was ist ? verifizieren, dass ng-click es unterstützt? IE könnte nicht. Versuchen Sie, etwas anderes zu tun? – Joppe

Antwort

1

Sie den Controller config in Route hinzufügen müssen, um zu verwenden,

Sie können die Anmelde-/Abmeldungsfunktion mit einem Dienst ausführen und die Funktionen in verschiedenen Controllern aufrufen.

DEMO

var app = angular.module('app', []); 
 
app.controller('loginController',['$scope', 'MyUser',function($scope, MyUser) 
 
{ 
 
    $scope.isloggedin = MyUser.getStatus(); 
 
    alert($scope.isloggedin); 
 
}]); 
 
app.service('MyUser', [function($scope) { 
 
    this.loggedIn = false; 
 
    return { 
 
    getStatus: function() { 
 
     this.loggedIn = true; 
 
     return this.loggedIn; 
 
    } 
 
    } 
 
}]);
<!DOCTYPE html> 
 
<html> 
 
<head> 
 
    <meta charset="utf-8" /> 
 
    <title></title> 
 
</head> 
 
<body ng-app="app" ng-controller="loginController"> 
 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.js"></script> 
 
</body> 
 
</html>

+0

ja .. das ist, was ich nicht tun will .. so habe ich Controller im Körper erwähnt ... Wenn ich diesen Weg dann mache ich, wie ich damit umgehen werde Ausloggen..? – Gags

+0

Logout ist auch auf dem gleichen Controller, wird es funktionieren – Sajeetharan

+0

nein ... nach erfolgreichem Login ... Zustand wird geändert .. und es geht zum Armaturenbrett und dort habe ich Dashboard Controller ... – Gags