Thực ra, chương trình phụ trợ của chúng tôi xác thực yêu cầu sử dụng Cookie trong tiêu đề yêu cầu. Tôi biết rằng nó sẽ từ chối nếu tôi đặt tiêu đề "Cookie". Vì vậy, có cách nào để gửi một Cookie để kết thúc trở lại?Cách gửi "Cookie" trong tiêu đề yêu cầu cho tất cả các yêu cầu trong Angular2?
Trả lời
Tôi đoán rằng có một giai đoạn mà bạn yêu cầu máy chủ xác thực bạn. Theo sau (và nếu xác thực thành công), máy chủ sẽ trả lại cookie trong phản hồi. Trình duyệt sẽ lưu trữ cookie này và gửi lại cho mỗi cuộc gọi.
Điều đó nói rằng, trong trường hợp yêu cầu miền chéo (CORS), bạn cần đặt withCredentials
của XHR thành true
để làm cho trình duyệt thêm cookie trong yêu cầu của bạn.
Để kích hoạt tính này với Angular2, chúng ta cần phải mở rộng các lớp BrowserXhr
như mô tả dưới đây:
@Injectable()
export class CustomBrowserXhr extends BrowserXhr {
constructor() {}
build(): any {
let xhr = super.build();
xhr.withCredentials = true;
return <any>(xhr);
}
}
và ghi đè lên các nhà cung cấp BrowserXhr
với mở rộng:
bootstrap(AppComponent, [
HTTP_PROVIDERS,
provide(BrowserXhr, { useClass: CustomBrowserXhr })
]);
Xem các câu hỏi này để biết thêm chi tiết :
Chỉnh sửa (sau bình luận của freaker s)
Từ RC2, bạn có thể sử dụng withCredentials
tài sản trực tiếp trong cấu hình yêu cầu như mô tả dưới đây:
this.http.get('http://...', { withCredentials: true })
Chỉnh sửa (theo nhận xét [maxou])
Hãy nhớ bao gồm withCredentials: true trên mọi yêu cầu.
- 1. Đặt cookie yêu cầu angular2 http yêu cầu bài đăng
- 2. Gửi Cookie theo yêu cầu của tiêu đề trong yêu cầu UI SOAP cho dịch vụ web còn lại
- 3. Nhiều tiêu đề 'Cookie' trong yêu cầu node.js
- 4. Đặt tiêu đề HTTP cho tất cả các yêu cầu trong thử nghiệm Flask
- 5. Cách sử dụng yêu cầu gửi yêu cầu PATCH với tiêu đề
- 6. Trình duyệt không gửi cookie trong yêu cầu tiếp theo
- 7. Đặt tiêu đề yêu cầu trong JavaScript
- 8. Yêu cầu xác thực cho tất cả các yêu cầu cho một ứng dụng OWIN
- 9. Thêm tiêu đề Để tất cả yêu cầu CXF gửi đi
- 10. Làm cách nào để xem tiêu đề yêu cầu trên các yêu cầu Android WebView?
- 11. Đặt cookie cho các yêu cầu UIWebView
- 12. Cách lấy tiêu đề trang trong các yêu cầu
- 13. Swift Alamofire thêm tiêu đề tùy chỉnh cho tất cả các yêu cầu
- 14. Có thể đăng nhập tất cả các tiêu đề yêu cầu HTTP bằng Apache không?
- 15. CORS trong grails - Tất cả các yêu cầu thất bại?
- 16. Cách đặt chuỗi tiêu đề yêu cầu
- 17. Cách đăng nhập tất cả tiêu đề yêu cầu/phản hồi trong Tomcat 7
- 18. HttpOnly cookie không được gửi theo yêu cầu
- 19. Trượt - thêm tiêu đề để yêu cầu
- 20. Cookie tên miền phụ được gửi theo yêu cầu Tiêu đề cookie, nhưng không xuất hiện trong tài liệu JavaScript.cookie
- 21. Laravel 5/Lumen Yêu cầu Tiêu đề?
- 22. Cách gửi yêu cầu OAuth trong Node
- 23. Node.js HTTPS POST Yêu cầu Tiêu đề
- 24. Cách gửi yêu cầu POST?
- 25. Gửi tiêu đề tùy chỉnh cùng với yêu cầu qtwebkit
- 26. Bộ lọc Servlet cho tất cả các yêu cầu
- 27. Tiêu đề yêu cầu HTTP: Biến UserAgent
- 28. Cách xác định "tiêu đề yêu cầu http" trong OpenURI
- 29. Yêu cầu Ajax có được đảm bảo gửi cookie không?
- 30. Cách gửi yêu cầu GET trong AS3?
Tính năng này đã được thêm vào angular2 ngay bây giờ. Bây giờ bạn có thể chỉ cần làm một cái gì đó như 'http.get (url, {withCredentials: true})' do đó giải pháp tiện dụng này không cần thiết nữa (như 2.0.0-rc4 hoặc cũ hơn). – freaker
Vâng, bạn nói đúng. Tôi đã được thêm vào trong RC2. Tôi đã cập nhật câu trả lời của mình cho phù hợp. Cảm ơn rất nhiều vì đã chỉ ra điều này ;-) –
có vẻ như với tôi rằng bằng cách sử dụng 'withCredentials',' Set-Cookie' trong phản hồi sẽ được thiết lập bởi máy khách, nhưng máy khách vẫn không gửi 'Cookie' trong yêu cầu (được đặt theo yêu cầu trước) – maxbellec