2016-06-06 16 views
7

5000 numaralı bağlantı noktasında çalışan bir node.js uygulaması var, burada passport.js'yi yetkilendirme olarak kullanıyorum. Ben özel bir geri arama kullanmak bir post isteği, kullanıcıları yetkilendirmek:Farklı kapılarda yerel pasaport yetkilendirme

this.router.post('/member/login', (req, res, next) => { 
     passport.authenticate('local', (err, member, info) => { 
     if (err) res.json(400).json({message: "An error ocurred"}); 
     if (!member) { 
      console.log("No member found!"); 
      return res.status(409).json({message: "No member found!"}) 
     } 
     req.logIn(member, (err) => { 
      if (err) { 
      console.log(err); 
      return res.status(400).json({message: "An error ocurred"}); 
      } 
      return res.json(member); 
     }); 
     })(req, res, next); 
    }); 

Bu iyi çalışır, ancak yerel geliştirmek zaman bu kadar farklı bir port (4200) üzerinde çalışan bir ön uç Angular2 uygulaması var geliştirmem yetkisiz kullanıcı almak mümkün değil: req.user undefined. Yetkili kullanıcıyı saklamak için ekspres oturumunu kullanırım.

Her iki uygulamayı da birlikte dağıttığım için her şey çalışıyor.

Bu sorun için herkes iyi ve basit bir çözüm var mı? Yine sadece geliştirme aşamasında bu problemim var.

+0

Neden dev gibi ortamlarda * birlikte çalışan şeyler de değil? – m02ph3u5

+0

Angular 2 cli kullanıyorum ve kendi düğümümü sunucu olarak kullanıp kullanamayacağımı ve nasıl ayarlanacağını bilmiyorum. – DNRN

cevap

3

Örneğin, proxy, Nginx'in arkasındaki hizmetleri de gizleyebilirsiniz. Ve her iki hizmetiniz de 1 adres kullanacak.

server { 
    listen 80; 

    server_name example.com; 

    proxy_set_header Host $http_host; 
    proxy_pass_header Server; 
    proxy_set_header X-Forwarded-For $remote_addr; 
    proxy_set_header X-Forwarded-Proto $scheme; 

    location/{ 
    proxy_pass http://frontend_address:port; 
    proxy_redirect default; 
    } 

    location ~ /api { 
    proxy_pass http://backend_address:port; 
    proxy_redirect default; 
    } 
} 

Nginx yapılandırma örneği Yani http://example.com hizmeti frontend gidecek tüm istekleri ve tüm istekleri arka uç hizmetine gitmek http://example.com/api/.

+0

Küçük bir örnek, cevabınızın kalitesini artıracaktır. – m02ph3u5

+0

Bu gerçekten aradığım zamandı! Teşekkür ederim! – DNRN

0

Farklı bağlantı noktalarında çalıştığınız için etki alanları arası bir sorununuz olduğunu düşünüyorum.

Bu sorun zaten tartışıldı ve ben burada bir çözüm bulabiliriz inanıyoruz: Eğer erişim başlıkları alanlar arası paylaşımına izin vermek için approperiate başlıkları göndermek için sunucu yapılandırmak için gereken Kısacası Passport js fails to maintain session in cross-domain

.

İlgili konular