У меня есть nodejs в качестве бэкэнда, который управляет сессией.
Я хотел бы иметь authGuard в клиенте (угловой), чтобы его canActivateChild получал ответ от сервера. На бэкэнд-сервере мне нужно также установить ответ, чтобы не быть неавторизованным http неавторизованным.
Это мой код:
nodejs:
sessionMng - функция сервера:
module.exports =
{
getUserSession : function (req, res)
{
if (req.session && req.session.user)
{
res.status(200).json(req.session.user);
}
else{
res.sendStatus(403);
}
},
hasSession : function(req, res, next)
{
if (req.session.user != null)
{
res.status(200).send(true); // Removing that make the response has 403 error code
return true;
}
else
{
res.status(403).send(false);
return false;
}
}
}
session.js - конечная точка для клиента:
const express = require('express');
const router = express.Router();
var sessionMgr = require('sessionMgr');
router.use("/", (req, res, next) => {
sessionManagement.getUserSession(req, res, next);
next();
});
router.use("/hasSession", (req, res, next) => {
return sessionMgr.hasSession(req, res, next);
});
module.exports = router;
Клиентская сторона CanActivateChild:
@Injectable({
providedIn: 'root'
})
export class AuthGuardService implements CanActivateChild {
constructor(private sessionSrv : sessionService) { }
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) : Observable<boolean>
{
return this.sessionSrv.hasSession(); //not working
//return true; // works
//return of(true);//also works
}
}
Служба с функцией, применимой к серверу Функция «hasSession»:
hasSession() : Observable<boolean>
{
var path = `.../session/hasSession`;
const options = { withCredentials: true };
return this.http.get<any>(path, options);
}