2015-03-13 4 views
6

Hier ist mein Fall:

  1. Benutzer nicht angemeldet ist, und sie versuchen, eine/Einstellungen Seite zuzugreifen.
  2. Meine Einstellungen Controller erkennt basierend auf $auth.isAuthenticated() != true, dass sie nicht angemeldet sind, und leitet sie an/login
  3. Benutzer füllt ihre E-Mail-Adresse und Passwort und schlägt einreichen.

Was würde ich wie auf diesem dritten Schritt zu tun ist, sie dann in das Verzeichnis/Einstellungen Seite umleiten, nicht die Homepage.

Ich denke, ich würde diese Variable ändern:

$authProvider.loginRedirect = '/';

Das Problem ist, dass ich nicht $authProvider in meiner loginCtrl.js Datei, ohne sich einen „unbekannten Anbieter“ Fehler in meiner Konsole enthalten kann: https://docs.angularjs.org/error/ $ injector/unpr? p0 = Mit anderen Worten erkennt Angular $authProvider nicht, wenn ich versuche, es einzuschließen. Hier ist, was meine loginCtrl.js Datei wie folgt aussieht:

/* Everything is blowing up because I'm trying to include $authProvider */ 
angular.module("PrayerChain") 
    .controller("loginCtrl", ["$rootScope", "$scope", "$state", "$http", "$auth", "$authProvider", loginCtrl]); 

function loginCtrl($rootScope, $scope, $state, $http, $auth, $authProvider) { 
    $authProvider.loginRedirect = '/settings'; 
    $scope.login = function() { 
     $auth.login({ Email: $scope.email, Password: $scope.password }) 
     .then(function() { 

     }) 
     .catch(function (response, status, headers) { 
      console.log(response); 
      $scope.error = JSON.parse(response.data); 
     }); 
    }; 
} 

$authProvider in einem Controller Ist einschließlich überhaupt möglich? Wenn nicht, was ist eine alternative Lösung, um zu ändern, wo Personen beim Anmelden mit Satellizer umgeleitet werden?

Danke.

Antwort

3

Normalerweise kann auf Provider-Objekte nur zur Konfigurationszeit zugegriffen werden, während Controller in Runtime erstellt werden. Wenn Sie die authProvider einrichten müssen, versuchen Sie tun:

angular.module('PrayerChain').config(
    [   "$authProvider", 
     function($authProvider) { 
      $authProvider.loginRedirect = '/settings'; 
     } 
    ]).controller("loginCtrl", 
    // ... 
+1

Perfekte Austin. Das schnitt den Senf. Vielen Dank! –

+0

Eine kurze Frage hier. Ich muss die Umleitung von der URL mit $ stateParams greifen, aber das ist zur Konfigurationszeit nicht verfügbar. Wie in aller Welt erwartet Satellizer, dass du das kannst? –

+0

Das ist eine gute Frage. Ich weiß eigentlich noch nichts über Satellizer, aber ich werde mit dir suchen. –

1

Die neue Version (0.12.5) werden diese Einstellungen nicht mehr verwenden. Sie müssen die URL in Ihrem Controller

$auth.login({ Email: $scope.email, Password: $scope.password }) 
    .then(function() { 
     $location.path('your-new-route'); 
    }) 
    .catch(function (response, status, headers) { 
     console.log(response); 
     $scope.error = JSON.parse(response.data); 
    }); 
+1

wo ist die URL? –

1

Ich war auf der Suche, dies zu tun, und dass in der Version 0.13.0 (früher vielleicht auch?) Gefunden setzen Sie einen Optionsparameter login Funktion wie diese passieren können:

$auth 
    .login(user, { 
    url: config.api + '/authenticate/customer' 
    }) 
Verwandte Themen