2016-11-30 4 views
0

Я создаю приложение в угловом 2 с машинописным текстом и добавляю аутентификацию.canActivated in angular2

Я создаю authguard для моего файла маршрутизации:

@Injectable() 
export class AuthGuard implements CanActivate { 

public router: Router; 
public serverThisLogin: ServerDataComponent; 

constructor(router: Router) { 
    this.router = router; 
} 

public canActivate(): boolean { 
    if (this.serverThisLogin.isLogin) { 
     return true; 
    } 
    this.router.navigate(["/login"]); 
    return false; 
} 
} 

И это isLogin() функция:

public isLogin (username: string, password: string): Observable<boolean> { 
    return this.http.post(authURL + loginURL, 
          JSON.stringify({ password, username })) 
    .map((response: Response) => { 
     if (response.status === 200) { 
      return true; 
     } else { 
      return false; 
     } 
    }); 
} 

добавить authguard в моем файле маршрута:

{ canActivate: [AuthGuard], component: LaskComponent, path: "table_per" } 

И теперь, когда я загружаю эту страницу localhost/table_per У меня есть эта ошибка: TypeError: Cannot read property 'isLogin' of undefined. Я действительно понимаю, почему это происходит.

+0

вы не впрыснуть ServerDataComponent ... – Dinistro

ответ

1

Вам просто нужно вводить услугу, чтобы иметь возможность использовать его, взять прибыль машинописи возможности использовать DI контейнер правильно:

@Injectable() 
export class AuthGuard implements CanActivate { 

public router: Router; 
public serverThisLogin: ServerDataComponent; 

constructor(private router: Router, private serviveThisLogin: ServerDataComponent) {} 

public canActivate(): boolean { 
    if (this.serverThisLogin.isLogin) { 
     return true; 
    } 

    this.router.navigate(["/login"]); 
    return false; 
    } 
} 

Кроме того, вы можете упростить свое состояние от этого:

if (response.status === 200) { 
      return true; 
     } else { 
      return false; 
     } 

Для этого:

return response.status === 200; 
+0

Спасибо оптоволоконный r быстрый ответ! Но, к сожалению, navegate to/login form не работает ( –