dasboe: Penso di rispondere alla tua domanda.
Ho un'app con un controllo di autenticazione/autorizzazione nel gestore di eventi $ routeChangeStart. Se non autenticato, presento l'utente con la pagina di accesso modale. Voglio un login riuscito per inviarli alla loro destinazione originale (Beauty di $ routeChangeStart è che verrà eseguito nuovamente e controllerà l'autorizzazione dopo il login riuscito). Salvataggio del percorso creato dal successivo in un servizio di sessione utente immesso nel controller di accesso modale.
qui è il gestore di eventi
//before each route change, check if the user is logged in
//and authorized to move onto the next route
$rootScope.$on('$routeChangeStart', function (event, next, prev) {
if (next !== undefined) {
if ('data' in next) {
if ('authorizedRoles' in next.data) {
var authorizedRoles = next.data.authorizedRoles;
if (!SessionService.isAuthorized(authorizedRoles)) {
event.preventDefault();
SessionService.setRedirectOnLogin(BuildPathFromRoute(next));
if (SessionService.isLoggedIn()) {
// user is not allowed
$rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
} else {
// user is not logged in
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
}
}
}
}
}
});
Qui è la funzione che costruisce il percorso dal prossimo oggetto
function BuildPathFromRoute(routeObj)
{
var path = routeObj.$$route.originalPath;
for (var property in routeObj.pathParams)
{
if (routeObj.pathParams.hasOwnProperty(property))
{
var regEx = new RegExp(":" + property, "gi");
path = path.replace(regEx, routeObj.pathParams[property].toString());
}
}
return path;
}
Note:
- Io non sono appassionato sulla mia dipendenza da itinerario $$, ma non ho trovato nessun altro modo per farlo. Forse ho perso qualcosa di più facile. Potrei invitare problemi a lungo termine.
- Il metodo preventDefault() non funziona sulle versioni di AngularJS precedenti alla 1.3.7 (vedere event.preventDefault() not working for routeChangeStart in angularjs app).
- Avvertenza standard: questo è tutto il lato client e soggetto ad abuso. Assicurarsi che l'autenticazione/l'autorizzazione avvenga sul lato server.
- Il successivo oggetto Route (dal gestore eventi) ha anche una proprietà params. Non sono sicuro se dovrei girare attraverso le sue proprietà come faccio con pathParams.
controllo questo fuori http://stackoverflow.com/questions/11541695/redirecting-to-a-certain-route-based-on-condition – stackg91
Grazie. L'ho visto prima, ma non penso che sia d'aiuto per il mio particolare problema. – dasboe