L'app su cui sto lavorando contiene vari stati (utilizzando ui-router), in cui alcuni stati richiedono l'accesso, altri sono disponibili pubblicamente.
Ho creato un metodo che controlla validamente se un utente ha effettuato l'accesso, quello che sto attualmente avendo problemi è in realtà reindirizzamento alla nostra pagina di accesso quando necessario. Va notato che la pagina di accesso non è attualmente inserita nell'app AngularJS.
app.run(function ($rootScope, $location, $window) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (toState.data.loginReq && !$rootScope.me.loggedIn) {
var landingUrl = $window.location.host + "/login";
console.log(landingUrl);
$window.open(landingUrl, "_self");
}
});
});
Il file console.log mostra correttamente l'URL desiderato. La linea dopo, ho provato praticamente tutto da $ window.open a window.location.href e non importa cosa ho provato, nessun redirect accade.
EDIT (risolti):
Trovato il problema.
var landingUrl = $window.location.host + "/login";
$window.open(landingUrl, "_self");
La landingUrl variabile è stata impostata su 'domain.com/login', che non avrebbe lavorato con $ window.location.href (che era una delle cose che ho provato). Tuttavia dopo aver modificato il codice in
var landingUrl = "http://" + $window.location.host + "/login";
$window.location.href = landingUrl;
ora funziona.
Probabilmente dovrebbe aggiungere anche l'autenticazione lato server sui dati, quindi quanto sopra non è l'unica autenticazione, è più una questione di convenienza per reindirizzare alla pagina di accesso, invece di mostrare una pagina prevalentemente vuota. –
è necessario l'oggetto 'location' nativo usando' $ window.location = ... ' – charlietfl
In alternativa si potrebbe considerare di rendere tutto un AngularJS compresa l'autenticazione - vedi questo post http://frederiknakstad.com/2013/01/21/authentication-in-single-page-applications-with-angular-js/ – Soren