dasboe: Tôi nghĩ tôi đang trả lời câu hỏi của bạn.
Tôi có một ứng dụng có kiểm tra xác thực/ủy quyền trong trình xử lý sự kiện $ routeChangeStart. Nếu không được xác thực, tôi trình bày người dùng với trang đăng nhập phương thức. Tôi muốn đăng nhập thành công để gửi chúng đến đích ban đầu của họ (Beauty of $ routeChangeStart là nó sẽ chạy lại và kiểm tra ủy quyền sau khi đăng nhập thành công). Tôi lưu đường dẫn được xây dựng từ kế tiếp trong một dịch vụ phiên người dùng được đưa vào bộ điều khiển đăng nhập phương thức.
ở đây là xử lý sự kiện
//before each route change, check if the user is logged in
//and authorized to move onto the next route
$rootScope.$on('$routeChangeStart', function (event, next, prev) {
if (next !== undefined) {
if ('data' in next) {
if ('authorizedRoles' in next.data) {
var authorizedRoles = next.data.authorizedRoles;
if (!SessionService.isAuthorized(authorizedRoles)) {
event.preventDefault();
SessionService.setRedirectOnLogin(BuildPathFromRoute(next));
if (SessionService.isLoggedIn()) {
// user is not allowed
$rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
} else {
// user is not logged in
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
}
}
}
}
}
});
Đây là chức năng mà xây dựng con đường từ đối tượng kế tiếp
function BuildPathFromRoute(routeObj)
{
var path = routeObj.$$route.originalPath;
for (var property in routeObj.pathParams)
{
if (routeObj.pathParams.hasOwnProperty(property))
{
var regEx = new RegExp(":" + property, "gi");
path = path.replace(regEx, routeObj.pathParams[property].toString());
}
}
return path;
}
Ghi chú:
- Tôi không quan tâm trên sự phụ thuộc vào lộ trình $$ của tôi, nhưng tôi không thể tìm ra cách nào khác để làm điều đó. Có lẽ tôi đã bỏ lỡ một cái gì đó dễ dàng hơn. Tôi có thể đang gặp rắc rối trong thời gian dài.
- Ngăn chặnDefault() sẽ không hoạt động trên các phiên bản AngularJS trước 1.3.7 (xem event.preventDefault() not working for routeChangeStart in angularjs app).
- Thông báo trước tiêu chuẩn: Đây là tất cả các mặt của khách hàng và chịu sự lạm dụng. Đảm bảo xác thực/ủy quyền xảy ra phía máy chủ.
- Đối tượng Route kế tiếp (từ trình xử lý sự kiện) cũng có thuộc tính params. Tôi không chắc liệu tôi có nên quay qua các thuộc tính của nó như tôi làm với pathParams hay không.
việc kiểm tra này ra http://stackoverflow.com/questions/11541695/redirecting-to-a-certain-route-based-on-condition – stackg91
Cảm ơn. Tôi đã nhìn thấy điều này trước đây nhưng tôi không nghĩ nó giúp ích cho vấn đề cụ thể của tôi. – dasboe