2016-11-24 23 views
7

Trong node.js (sử dụng khung Hapi), tôi đang tạo liên kết để người dùng cho phép ứng dụng của tôi đọc tài khoản người dùng. Google xử lý yêu cầu đó và hỏi về cấp quyền. Sau đó, Google chuyển hướng đến máy chủ của tôi với tham số GET làm mã phản hồi và tại đây tôi gặp sự cố.Chrome không gửi cookie sau khi chuyển hướng

Google Chrome không gửi cookie có ID phiên.

Nếu tôi đánh dấu cookie đó là cookie phiên trong tiện ích chỉnh sửa cookie, nó sẽ được gửi. Hành vi tương tự trong php, nhưng php đánh dấu cookie là phiên khi tạo phiên, do đó, nó không phải là vấn đề. Tôi đang sử dụng plugin hapi-auth-cookie, nó tạo phiên và xử lý mọi thứ về nó. Tôi cũng đánh dấu cookie đó trong cài đặt cookie hapi-auth là không HttpOnly, bởi vì nó là sự khác biệt đầu tiên, mà tôi đã nhận thấy, khi kiểm tra cookie phiên PHP và của tôi trong node.js. Tôi có phản hồi xác thực mất tích 401 trên mỗi chuyển hướng. Nếu tôi đặt con trỏ vào thanh địa chỉ và nhấn enter, mọi thứ hoạt động tốt, do đó, nó là một vấn đề với chuyển hướng.

Câu hỏi của tôi về cơ bản là những gì có thể gây ra hành vi đó. Mặt khác tôi phải đề cập đến rằng firefox gửi cookie sau mỗi yêu cầu mà không có bất kỳ vấn đề.

Headers sau khi chuyển hướng (không có cookie với session):

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "x-client-data": "CJS2eQHIprbJAQjEtskECKmdygE=", 
    "x-chrome-connected": "id=110052060380026604986,mode=0,enable_account_consistency=false", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" 
} 

Headers sau khi chạm nhập vào thanh địa chỉ (những gì sẽ làm việc tốt):

{ 
    "host": "localhost:3000", 
    "connection": "keep-alive", 
    "cache-control": "max-age=0", 
    "upgrade-insecure-requests": "1", 
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", 
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
    "accept-encoding": "gzip, deflate, sdch, br", 
    "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4", 
    "cookie": "SESSID=very_long_string" 
} 
+0

Vui lòng hiển thị mã cho chuyển hướng. Hai điều cần kiểm tra: Bạn có đặt đường dẫn gốc trên cookie phiên để có thể nhìn thấy từ mọi nơi trên trang web không? Chuyển hướng của bạn đến cùng một tên miền/cổng/giao thức có phải là trang mà cookie được đặt không? – jfriend00

+0

Có, cookie có đường dẫn:/và nó hoạt động tốt trên mọi tuyến đường. Google đang thực hiện chuyển hướng đến trang web của tôi sau khi lần truy cập của người dùng cho phép, vì vậy tôi không có mã đó. Và nó là tất cả mọi thứ tốt về mặt lý thuyết vì tôi có thể nhấn enter trong thanh địa chỉ và sau đó cookie được gửi đi. Google chrome chỉ không gửi cookie sau khi chuyển hướng từ google đến 'http: // localhost: 3000/api? Code = code_from_google' nhưng nếu tôi sao chép liên kết và dán nó, nó hoạt động. –

Trả lời

4

Vấn đề này là do HAPI-auth -cookie chưa giao dịch với isSameSite (tính năng mới của Hapi). Chúng ta có thể thiết lập nó bằng tay, ví dụ.

const server = new Hapi.Server(
    connections: { 
     state: { 
      isSameSite: 'Lax' 
     } 
    } 
); 

Nhưng hãy xem xét việc đó, theo mặc định bạn có 'Strict' tùy chọn, và trong nhiều trường hợp, bạn có thể không muốn thay đổi giá trị đó.

+0

Sử dụng 'Lax' cho SameSite đã giải quyết được sự cố của tôi về vấn đề này, nhưng tôi tò mò: chúng ta cần phải thay đổi gì về chuỗi' cookieAuth.set' → 'reply.redirect' để đưa cookie trở lại yêu cầu chuyển hướng khi 'isSameSite' là' Strict'? Nếu chúng tôi tải lại, chúng tôi sẽ nhận được cookie. 'Set-cookie' rõ ràng đang hoạt động. Chỉ Chrome không gửi cookie khi được chuyển hướng, ngay cả khi chuyển hướng đủ điều kiện. –

+0

Tôi đã nêu lên một dạng đầy đủ hơn về câu hỏi ở trên là ['42216700'] (http://stackoverflow.com/questions/42216700/how-can-i-redirect-after-oauth2-with-samesite-strict- và-vẫn-get-my-cookies) –

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