Angular RouteGuard работает с expressj-сессией nodejs - PullRequest
0 голосов
/ 03 июля 2019

У меня есть 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);  
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...