2017-02-18 31 views
6

trong Ứng dụng của tôi (Góc 2/Ionic 2) Tôi đã thực hiện đăng nhập/xác thực của riêng mình. Về cơ bản nó hoạt động như thế này: Khi đăng nhập, tên người dùng và mật khẩu đang được xác nhận bởi chương trình phụ trợ PHP. Một mã thông báo được tạo, được gửi trở lại sau đó giao diện người dùng trong tiêu đề (Cấp quyền). Phản hồi từ chương trình phụ trợ trông giống như sau:Góc 2: Nhận tiêu đề ủy quyền

HTTP/1.1 200 OK 
Host: localhost:8080 
Connection: close 
X-Powered-By: PHP/5.6.28 
Set-Cookie: PHPSESSID=jagagi2le1b8i7r90esr4vmeo6; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Type: application/json 
Authorization: d7b24a1643a61706975213306446aa4e4157d167eaad9aac989067a329c492d3 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: X-Requested-With, Content-Type, Accept, Origin, Authorization 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
Content-Length: 301 

Rõ ràng là tiêu đề Cấp phép có mã thông báo. CORS dường như cũng được thiết lập chính xác, vì tôi thấy Ủy quyền trong tiêu đề Cho phép-Tiêu đề.

Tuy nhiên, khi tôi cố gắng để có được những tiêu đề trong góc 2, nó luôn luôn trả về null:

private extractDataAndSetAuthHeader(res: Response) { 

    // Set auth header if available. 
    // If not available - user is not logged in. Then 
    // we also have to remove the token from localStorage 
    if(res.headers.has("Authorization")) 
    { 
     let token = res.headers.get("Authorization"); 

     this.setToken(token); 
    } 
    else 
    { 
     // If no token is sent, remove it 
     this.removeToken(); 
    } 

    let body = res.json(); 
    return body.data || { }; 
} 

Dòng đầu tiên của phương pháp này mang lại cho trở lại sai. Ngoài ra, khi tôi kiểm tra đối tượng tiêu đề trong phản hồi của tôi, nó chỉ hiển thị cho tôi những công cụ sau (công cụ Chrome dev):

[[Entries]]: 
Array[4] 
0:{"pragma" => Array[1]} 
1:{"content-type" => Array[1]} 
2:{"cache-control" => Array[1]} 
3:{"expires" => Array[1]} 

Không có tiêu đề ủy quyền có trong đối tượng đó.

Có ai vui lòng giúp tôi không?

Cảm ơn trước :)

+0

'Ủy quyền' thường được sử dụng làm tiêu đề yêu cầu, không phải là r esponse. Tại sao bạn không trả lại mã thông báo truy cập trong nội dung phản hồi? –

+0

Bởi vì theo như tôi biết đó là những gì 'Authorization' tiêu đề là cho. Ở mỗi yêu cầu (khi người dùng đăng nhập), tôi sẽ gửi tiêu đề Cấp quyền trong yêu cầu, kiểm tra xem mã thông báo vẫn hợp lệ, sau đó, để bảo mật hơn, tạo lại mã thông báo và gửi lại giao diện người dùng bằng ' Tiêu đề ủy quyền'. Tôi có thiếu gì đó không? – dave0688

+3

http://stackoverflow.com/q/42306684/2587435 –

Trả lời

15

Chỉ muốn gửi câu trả lời vì nó có thể giúp đỡ người khác: Các giải pháp nhằm thiết lập

Access-Control-Expose-Headers: Authorization 

Sau đó - lối vào có thể đọc các tiêu đề ủy quyền là tốt.

+1

bạn đã thêm cái này ở đâu? – MrNew

+0

Bạn phải thêm điều này vào phần phụ trợ của mình. – VWeber

+0

Tks, phù hợp với tôi. –

2

Câu trả lời này đã giúp tôi: link

Nó cho thấy làm thế nào để thêm nó vào backend và cách sử dụng nó trong frontend

Java backend:

public void methodJava(HttpServletResponse response){ 
... 
response.addHeader("access-control-expose-headers", "Authorization"); 
} 

Và truy cập vào tiêu đề trên góc như thế này:

return this.http 
    .get(<your url here for your backend>) 
    .map(res => console.log("cookie: " + res.headers.get("Authorization")) 
} 
+0

Một liên kết đến một giải pháp được chào đón, nhưng hãy đảm bảo câu trả lời của bạn hữu ích mà không có nó: [thêm ngữ cảnh xung quanh liên kết] (// meta.stackexchange.com/a/8259) để người dùng của bạn sẽ có một số ý tưởng và tại sao nó ở đó, sau đó trích dẫn phần có liên quan nhất của trang bạn đang liên kết đến trong trường hợp trang đích không có sẵn. [Các câu trả lời có nhiều hơn một liên kết có thể bị xóa.] (// stackoverflow.com/help/deleted-answers) – Rob

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên đưa các phần quan trọng của câu trả lời vào đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18132740) –

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