Tôi có giao diện người dùng được phát triển trong AngularJS với ui-router. Để tiêu thụ API REST từ chương trình phụ trợ, tôi cần nhận mã thông báo truy cập OAuth2 (trợ cấp ngầm định).AngularJS ui-router xung đột với OAuth2 access_token
Vấn đề của tôi nằm ở bước cuối cùng của vũ OAuth, khi tôi nhận được access token trở lại từ máy chủ xác thực trong url
mydomain.com/home/#access_token=hdzjkdnba89fenbjkéz38U0D903ç&...
mydomain.com/home
là chuyển hướng URI, rõ ràng.
Chỉ cần một phần nhỏ của giây sau khi chuyển hướng, AngularJS thay đổi URL trong một cái gì đó giống như
mydomain.com/#/my-default-view
và hậu quả là các thẻ truy cập sẽ bị xóa khỏi URL.
Một số điều cần bây giờ là:
- tôi không được phép để xác định một URI chuyển hướng chứa một hash ('#') cho khách hàng OAuth2 tôi. Do đó, chẳng hạn như
mydomain.com/#/auth-complete/
sẽ không phải là OK. - Tôi sử dụng
$routeProvider.otherwise('/')
. - Tôi đã cố gắng đặt
$locationProvider.html5Mode(true);
để xóa '#' ở giữa nhưng vấn đề là như nhau (URL và mã thông báo truy cập bị xóa ngay lập tức sau khi chuyển hướng). - Khi mã thông báo truy cập vẫn có thể truy cập trong phản hồi HTTP ngay cả sau khi URL được sửa đổi bởi Angular, tôi có thể sử dụng máy đánh chặn
$http
nhưng âm thanh hơi quá nhiều cho công việc chung này phải không?
Bạn có lời khuyên nào không?
Có thể bạn có thể không có trạng thái phù hợp cho URL xác thực. Vì bạn có $ routeProvider.otherwise ('/'), các mẫu url chưa được so khớp sẽ được chuyển tiếp đến thư mục gốc của trang web. – erandac
Nhưng làm cách nào để khớp với một url chứa mã thông báo tùy ý? Có thể sử dụng một cái gì đó như regex để nói "nếu url chứa 'access_token', chỉ cần không làm bất cứ điều gì"? – Buddyshot
Có bạn có thể có kết hợp regex. Kiểm tra tài liệu ở đây https://github.com/angular-ui/ui-router/wiki/URL-Routing – erandac