2013-02-07 29 views
6

Tôi đang tạo ứng dụng web/phonegap cho phiên bản Android cũ hơn (2.3.x). Tất cả mọi thứ hoạt động tuyệt vời cho đến khi tôi cố gắng thêm bất kỳ chuyển hướng máy chủ vào hỗn hợp. Đây là kịch bản:Vòng chuyển hướng vô hạn trên Android khi chuyển hướng từ máy chủ với AngularJS

Máy chủ (node.js) có tuyến đường đang nghe tại '/'. Khi tuyến đường này bị đánh, nó sẽ kiểm tra xem có phiên nào không. Nếu không có phiên, nó chuyển hướng đến/đăng nhập. Tốt, phần này hoạt động (máy chủ khôn ngoan, anyways).

Sự cố phát sinh khi khách hàng nhận được chuyển hướng. Bởi vì Android 2.3 không hỗ trợ history.pushState, nó rơi trở lại hashbangs. Điều này có nghĩa là AngularJS ghi đè url vào/#!/Login, điều này làm cho máy chủ yêu cầu '/', khiến máy chủ kiểm tra phiên và chuyển hướng đến '/ login', điều này khiến AngularJS ghi đè url thành/#!/đăng nhập .. vv .. vv .. vô thời hạn.

Bất kỳ ý tưởng nào về cách tôi có thể chuyển hướng từ máy chủ với AngularJS? Tôi có nên không xử lý logic này trong tuyến đường của mình mà thay vào đó hãy thử triển khai nó trên máy khách? Phải có một cách để xử lý điều này, tôi chắc chắn, nhưng tôi chỉ có thể không tìm ra nó.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn!!

+0

Tôi không chắc chắn Tôi hoàn toàn làm theo mô tả của bạn: nếu máy chủ đang phát hành chuyển hướng, trình duyệt đó sẽ nhận được, không phải là AngularJS. Nhưng có lẽ bạn đang nhận URL đó từ máy chủ qua xhr và gán cho $ location, sẽ không hoạt động: Từ tài liệu góc: "Dịch vụ vị trí $ cho phép bạn chỉ thay đổi URL, nó không cho phép bạn tải lại trang. Khi bạn cần thay đổi URL và tải lại trang hoặc điều hướng đến một trang khác, vui lòng sử dụng API cấp thấp hơn, $ window.location.href. " Ngoài ra, có lẽ bạn cần phải chuyển hướng đến '/ login #!/Login'? – Piran

+0

Tôi ước tôi có thể cho thấy chính xác những gì đang xảy ra, nhưng Angular là "cướp" máy chủ của tôi chuyển hướng. Máy chủ chuyển hướng đến/đăng nhập và viết lại góc này như/#!/Login, khiến máy chủ nói "Bạn chưa đăng nhập, do đó hãy chuyển hướng đến đăng nhập". Các máy chủ được các tuyến đường như/(đó là nên, bởi vì đó là những gì Angular viết lại nó như). –

Trả lời

0

Sẽ tốt hơn nếu bạn thực hiện xác thực hoàn toàn phía máy khách. Thực hiện cuộc gọi ajax khi bắt đầu ở đầu góc yêu cầu chúng tôi có đăng nhập hay không. Nếu không, hãy nhắc người dùng cung cấp thông tin (có thể trong hộp thoại phương thức) và sau đó POST vào '/ login' trên máy chủ.

Để bảo mật, không có thông tin nhạy cảm xác thực nào được lưu trữ ở phía máy khách. Thay vào đó, có nó lấy với ajax - và trả lời ajax với một 401 hoặc một số lỗi nếu người dùng không đăng nhập một cách chính xác.

+0

Đây sẽ là một việc thực hiện khó khăn cho bản chất của ứng dụng của chúng tôi - Tôi đã cố gắng này. Tôi phải làm việc với những hạn chế của kiến ​​trúc máy chủ đã được thiết lập, thật đáng buồn. Cảm ơn, mặc dù! –

1

Sử dụng một đối tượng đơn giản để đổi hướng chỉ huy:
Nếu người dùng không đăng nhập, trở {action: "redirect" url:"/login"}

Sau đó, trong khách hàng, sau khi nhận được phản ứng, kiểm tra action == 'redirect'$location.path(url)

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