Tôi đang sử dụng phiên bản 2.4 và phiên bản bộ định tuyến góc "^ 3.4.10".angular2: cách nhận Đường dẫn đầy đủ trên bảo vệ CanLoad trong khi duy trì url chuyển hướng
Tôi đang cố gắng xử lý url chuyển hướng bằng dịch vụ bảo vệ thông tin.
Khi người dùng nhấn url 'miền/nhiệm vụ/3/chi tiết' và nếu người dùng không đăng nhập thì người dùng được chuyển hướng đến trang 'tên miền/đăng nhập'. và khi người dùng đăng nhập thành công vào hệ thống, sau đó được chuyển hướng đến url trước đó của tên miền/nhiệm vụ/3/chi tiết mà người dùng cố gắng truy cập.
Tôi đã triển khai bảo vệ CanLoad trên mô-đun gán. vì vậy khi người dùng cố gắng truy cập vào url 'tên miền/nhiệm vụ/3/chi tiết' và nếu người dùng không đăng nhập, lưu trữ url vào thuộc tính redirectUrl của authservice (this.authService.redirectUrl).
vì vậy, đây là sự cố xảy ra trong trường hợp của tôi. tôi không thể nhận được đường dẫn đầy đủ của url mà người dùng truy cập. tôi đang nhận 'chuyển nhượng' thay thế 'chuyển nhượng/3/chi tiết' trong bảo vệ CanLoad. làm cách nào tôi có thể nhận được đường dẫn đầy đủ để tôi có thể chuyển hướng người dùng đến đường dẫn thích hợp trong bảo vệ CanLoad.
CanLoad:
canLoad(route: Route): boolean {
let url = `/${route.path}`; // here i got url path 'assignment' instead 'assignment/3/detail'
return this.checkLogin(url);
}
Main định tuyến app.routes.ts
const routes: Routes = [
{ path: '', redirectTo: 'login', pathMatch: 'full' },
{ path: 'login', component: LoginComponent},
{
path: 'assignment',
loadChildren: './assignment/assignment.module#AssignmentModule',
canLoad: [AuthGuard]
},
{ path: '**', redirectTo: '', pathMatch: 'full' }];
Phân tuyến: phân-routing.ts
const assignmentRoutes: Routes = [
{
path: '',
component: AssignmentComponent,
canActivate: [AuthGuard]
children: [
{
path: '',
canActivateChild: [AuthGuard],
children: [
{
path: ':assignmentId/detail', component: AssignmentDetailComponent,
canActivate: [AuthGuard]
}
]
}]
}];
AuthGuard: auth-gurad.service.ts
import { Injectable } from '@angular/core';
import {
CanActivate, Router,
ActivatedRouteSnapshot,
RouterStateSnapshot,
CanActivateChild,
NavigationExtras,
CanLoad, Route
} from '@angular/router';
import { AuthService } from './auth.service';
@Injectable()
export class AuthGuard implements CanActivate, CanActivateChild, CanLoad {
constructor(private authService: AuthService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url;
return this.checkLogin(url);
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
return this.canActivate(route, state);
}
canLoad(route: Route): boolean {
let url = `/${route.path}`; // here i got url path 'assignment' instead 'assignment/3/detail'
return this.checkLogin(url);
}
checkLogin(url: string): boolean {
if (this.authService.isLoggedIn) {
if(this.authService.redirectUrl!=null){
let redirectUrl = this.authService.redirectUrl;
this.authService.redirectUrl = null;
this.this.router.navigate([redirectUrl]);
}
return true;
}
// Store the attempted URL for redirecting
this.authService.redirectUrl = url;
// Navigate to the login page
this.router.navigate(['/login']);
return false;
}
}
Cảm ơn Edwin về các đề xuất và câu trả lời của bạn. – Krishna