/ / Router UI angolare ed Express Router - angularjs, express, angular-ui-router, passport.js

Router angolare UI e router Express - angularjs, express, angular-ui-router, passport.js

Sto cercando di implementare la funzionalità di accesso e c'è un reindirizzamento dopo successo / fallimento utilizzando Express Router:

router.post("/login",
passport.authenticate("local", {successRedirect:"/dashboard", failureRedirect:"/login",failureFlash: true}),
function(req, res) {
res.redirect("/");
});

e dopo aver effettuato il login con successo, ho ottenuto Cannot GET /dashboard o in caso di fallimento Cannot GET /login. C'è qualche incompatibilità tra il routing sul server (Express) e sul lato client (Angular UI Router)? Dovrei usare solo uno dei router e quale?

Ecco il codice per il router UI:

angular
.module("app", [
"ngAnimate",
"ngAria",
"ngCookies",
"ngResource",
"ngTouch"
])
.config( function ($stateProvider, $urlRouterProvider, $locationProvider){
$stateProvider
.state("login", {
url: "/login",
templateUrl: "views/login.html",
controller: "LoginCtrl"
})
.state("home", {
url: "",
templateUrl: "views/home.html",
controller: "HomeCtrl"
})
.state("home.dashboard", {
abstract: true,
url: "/dashboard",
templateUrl: "views/dashboard.html"
});

// For any unmatched url, send to /
$urlRouterProvider.otherwise("/");
$mdGestureProvider.skipClickHijack();
//remove the hashtag from URL
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
});

risposte:

1 per risposta № 1

Il tuo router espresso va bene. ed era un modulo di presentazione normale, la pagina verrà reindirizzata correttamente.

Ma poiché le richieste vengono fatte tramite Ajax da Angular App, quei reindirizzamenti non sono noti all'app e quindi non fanno nulla.

Fai valutare alla tua dashboard o al controller di accesso lo stato di accesso e quindi reindirizza da lì.


1 per risposta № 2

Il codice corrente che hai scritto non reindirizza al front-end, ma genera una nuova richiesta GET, devi gestire le richieste GET generate.

nel tuo caso

    router.get("/dashboard",function(req,res){
res.redirect("full path of the url which you use in browser")
});

o prova questo

{successRedirect:"http://your front end domain/dashboard", failureRedirect:"http://your front end domain/login",failureFlash: true}