如果用户直接通过浏览器URL访问受保护的路由,如何重定向到组件?

时间:2019-05-08 05:33:15

标签: angular

我已经成功使用受保护的路由在angular 7中创建了一个登录页面,现在,如果用户尝试使用正确的凭据登录,它将重定向到仪表板组件,并且如果凭据为假,它将仅在登录时显示一条消息“ Invalid login”组件本身。

现在如何配置用户是否通过浏览器URL直接浏览到受保护的组件? 当前,它仅显示空白页面,而无法访问受保护的路由。

2 个答案:

答案 0 :(得分:1)

您必须使用Authguard保护您的路由。

在路由器模块文件中,您必须具有以下内容:

canActivateChild: [AuthGuard],

在AuthGuard文件中,您应该检查令牌,如果用户具有有效的令牌,那么他/她可以到达该路由,如果没有,则可以将其重定向到登录页面。

AuthGuard文件应如下所示:

import { Injectable } from '@angular/core';
import {ActivatedRouteSnapshot, CanActivateChild, RouterStateSnapshot} from 
'@angular/router';
import { Router } from '@angular/router';
import {Observable} from 'rxjs/internal/Observable';
import {LocalDataService} from '../services/local-data.service';
import {SessionStorage} from 'ngx-webstorage';

@Injectable()
export class AuthGuard implements CanActivateChild {

@SessionStorage('token')
public token;


canActivateChild(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
if(this.token){
return true;
}
this.router.navigate(['auth/login']);
return false;

}
}

答案 1 :(得分:0)

您需要先预订Router事件。 写

        //Need something that executes these if statements at     random

       int random=ThreadLocalRandom.current().nextInt(1,5);

       switch(random)

       {

        case 1:
        //Searching one block down
        if ( searchPath( maze, x - 1, y, path ) )
        {
            path.add( new Point( x, y ) );
            return true;
        }
        break;

         case 2:    
        //Searching one block up
        if ( searchPath( maze, x + 1, y, path ) )
        {
            path.add( new Point( x, y ) );
            return true;
        }
        break;

        case 3:
        //Searching one block left
        if ( searchPath( maze, x, y - 1, path ) )
        {
            path.add( new Point( x, y ) );
            return true;
        }
        break;

        case 4:
        //Searching one block right
        if ( searchPath( maze, x, y + 1, path ) )
        {
            path.add( new Point( x, y ) );
            return true;
        }
        break;

        }

在您的应用程序组件的构造函数中。 这将检测所有URL更改以及直接路由更改。在subscription方法中,编写您的逻辑