Angular 登录不工作后角度重定向到上一页
我已经尝试使用下面的解决方案在登录后将用户重定向到上一页,但它不会立即重定向到上一个url。它走“/”路线。当我点击F5刷新页面时,它最终转到之前捕获的state.url 这是我的Angular 登录不工作后角度重定向到上一页,angular,typescript,angular5,Angular,Typescript,Angular5,我已经尝试使用下面的解决方案在登录后将用户重定向到上一页,但它不会立即重定向到上一个url。它走“/”路线。当我点击F5刷新页面时,它最终转到之前捕获的state.url 这是我的auth.guard.ts canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { let url: string = state.url; if (localStorage.getItem('isLoggedin
auth.guard.ts
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
if (localStorage.getItem('isLoggedin')) {
console.log("logged in");
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['/login'],{ queryParams : { 'redirectURL' : url }});
return false;
}
}
如何在登录后立即转到state.url
编辑:我在console.log(“登录”)
输出之后添加了一个console.log(路由)
,并且没有对象附加到queryParams
属性。
我希望看到重定向URL
附件
使用
route.snapshot.paramMap.get('previousUrl')代码>
试着这样做:
canActivate(route: ActivatedRoute, state: RouterStateSnapshot) {
let url: string = route.snapshot.paramMap.get('previousUrl');
if (localStorage.getItem('isLoggedin')) {
console.log("logged in");
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['/login'],{ queryParams : { 'redirectURL' : url }});
return false;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
if (localStorage.getItem('isLoggedin')) {
return true;
} else {
localStorage.setItem('redirectToPage', '' + url);
this.router.navigate(['/login']);
return false;
}
}
使用route.snapshot.paramMap.get('previousUrl')代码>
试着这样做:
canActivate(route: ActivatedRoute, state: RouterStateSnapshot) {
let url: string = route.snapshot.paramMap.get('previousUrl');
if (localStorage.getItem('isLoggedin')) {
console.log("logged in");
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['/login'],{ queryParams : { 'redirectURL' : url }});
return false;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
if (localStorage.getItem('isLoggedin')) {
return true;
} else {
localStorage.setItem('redirectToPage', '' + url);
this.router.navigate(['/login']);
return false;
}
}
试试这个:
您可以在登录之前发送URL,并按如下方式使用它
@Component({ ... })
class SomePageComponent {
constructor(private route: ActivatedRoute, private router: Router) {}
checkLogin() {
if (!this.auth.loggedIn()) {
this.router.navigate(['/login`], { queryParams: { redirectTo: this.route.snapshot.url } });
}
}
}
因此,在登录组件中,您可以像这样访问queryParams
@Component({...})
class LoginComponent {
constructor(private router: Router, private route: ActivatedRoute) {}
backToPreviousPage() {
this.router.navigate([this.route.snapshot.queryParam.get('redirectTo')]);
}
}
试试这个:
您可以在登录之前发送URL,并按如下方式使用它
@Component({ ... })
class SomePageComponent {
constructor(private route: ActivatedRoute, private router: Router) {}
checkLogin() {
if (!this.auth.loggedIn()) {
this.router.navigate(['/login`], { queryParams: { redirectTo: this.route.snapshot.url } });
}
}
}
因此,在登录组件中,您可以像这样访问queryParams
@Component({...})
class LoginComponent {
constructor(private router: Router, private route: ActivatedRoute) {}
backToPreviousPage() {
this.router.navigate([this.route.snapshot.queryParam.get('redirectTo')]);
}
}
通过添加cookie来存储以前的URL解决了此问题。
所以canActive@auth.guard.ts
结果如下:
canActivate(route: ActivatedRoute, state: RouterStateSnapshot) {
let url: string = route.snapshot.paramMap.get('previousUrl');
if (localStorage.getItem('isLoggedin')) {
console.log("logged in");
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['/login'],{ queryParams : { 'redirectURL' : url }});
return false;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
if (localStorage.getItem('isLoggedin')) {
return true;
} else {
localStorage.setItem('redirectToPage', '' + url);
this.router.navigate(['/login']);
return false;
}
}
下一步,将此添加到layout.component.ts
let redir = localStorage.getItem('redirectToPage');
if(redir.includes("mypath/")){
this.router.navigate([redir]);
} else {
this.router.navigate(['/homepage']);
}
进入请求的页面后,我从localStorage
中删除了redirectToPage
,通过添加cookie来存储以前的URL解决了这个问题。
所以canActive@auth.guard.ts
结果如下:
canActivate(route: ActivatedRoute, state: RouterStateSnapshot) {
let url: string = route.snapshot.paramMap.get('previousUrl');
if (localStorage.getItem('isLoggedin')) {
console.log("logged in");
return true;
} else {
console.log('Could not authenticate');
this.router.navigate(['/login'],{ queryParams : { 'redirectURL' : url }});
return false;
}
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let url: string = state.url;
if (localStorage.getItem('isLoggedin')) {
return true;
} else {
localStorage.setItem('redirectToPage', '' + url);
this.router.navigate(['/login']);
return false;
}
}
下一步,将此添加到layout.component.ts
let redir = localStorage.getItem('redirectToPage');
if(redir.includes("mypath/")){
this.router.navigate([redir]);
} else {
this.router.navigate(['/homepage']);
}
进入请求页面后,我从localStorage
中删除了redirectToPage
为什么不使用?顺便说一句:您可以通过查询url在LoginComponent中编写另一个导航。@Numichi我使用auth.guard.ts,因为这是我在internet上搜索时发现的最常见的解决方案,所以决定尝试一下。为什么不使用?顺便说一句:您可以通过查询url在LoginComponent中编写另一个navigate。@Numichi我使用auth.guard.ts,因为这是我在internet上搜索时发现的最常见的解决方案,所以决定尝试一下。在使用route.snapshot.paramMap.get时,我得到一个“属性“snapshot”不存在于类型“ActivatedRouteSnapshot”上('previousUrl')检查修改后的答案。route:ActivatedRoute
现在它告诉我它不是canActivate的正确实现。错误是:类型'ActivatedRouteSnapshot'中缺少属性'snapshot',但类型'ActivatedRoute'中需要属性'snapshot'。我使用的角度版本是5。我得到一个使用route.snapshot.paramMap.get('previousUrl')时,“ActivatedRouteSnapshot'类型上不存在属性'snapshot'检查修改后的答案。route:ActivatedRoute
现在它告诉我它不是canActivate的正确实现。错误说明:类型“ActivatedRouteSnapshot”中缺少属性“snapshot”,但类型“ActivatedRoute”中需要属性“snapshot”。我使用的角度版本是5。