2016-06-06 13 views
7

Tôi có một ứng dụng node.js chạy trên cổng 5000, nơi tôi sử dụng passport.js làm ủy quyền. Tôi cho phép người dùng từ một bài yêu cầu, nơi mà tôi sử dụng một callback tùy chỉnh:Ủy quyền hộ chiếu địa phương trên các cổng khác nhau

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); 
    }); 

này hoạt động tốt, nhưng khi tôi phát triển địa phương tôi có một lối vào Angular2 ứng dụng, chạy trên một cổng khác nhau (4200), vì vậy trong sự phát triển của tôi Tôi không thể có được người dùng được ủy quyền: req.user không được xác định. Tôi sử dụng phiên giao dịch để lưu trữ người dùng được ủy quyền.

Khi tôi triển khai, tôi gộp cả hai ứng dụng lại với nhau, vì vậy mọi thứ hoạt động.

Có ai có giải pháp tốt và đơn giản cho vấn đề này không? Một lần nữa nó chỉ trong phát triển tôi có vấn đề này.

+0

Tại sao những thứ đó * cùng nhau chạy * trong môi trường dev của bạn? – m02ph3u5

+0

Tôi đang sử dụng Angular 2 cli và không biết liệu có thể sử dụng nút của riêng tôi làm máy chủ hay không và cách thiết lập nó. – DNRN

Trả lời

3

Bạn có thể ẩn cả hai dịch vụ sau proxy, ví dụ như Nginx. Và cả hai dịch vụ của bạn sẽ sử dụng 1 địa chỉ.

nginx cấu hình ví dụ

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; 
    } 
} 

Vì vậy, tất cả các yêu cầu http://example.com sẽ đi đến lối vào dịch vụ, và tất cả các yêu cầu http://example.com/api/ đi đến dịch vụ phụ trợ.

+0

Một ví dụ nhỏ sẽ làm tăng chất lượng câu trả lời của bạn. – m02ph3u5

+0

Đây thực sự là tôi đang tìm kiếm! Cảm ơn bạn! – DNRN

0

Tôi tin rằng bạn có vấn đề về tên miền chéo, vì bạn đang chạy trên các cổng khác nhau.

Vấn đề này đã được thảo luận đã có, và tôi tin rằng bạn có thể tìm thấy một giải pháp ở đây: Passport js fails to maintain session in cross-domain

Tóm lại, bạn cần phải cấu hình máy chủ của bạn để gửi các tiêu đề approperiate cho phép chia sẻ cross-domain của các tiêu đề truy cập .

Các vấn đề liên quan