2016-05-15 60 views
2

我有一个家组件,它需要调用LoginComponent方法isLoggedIn()来检查用户是否登录在@CanActivateAngular2进口组件的方法进入另一个组件

如下家组件应该只有当用户激活被记录在和认证

HomeComponent.ts

import {Component, OnInit} from 'angular2/core'; 
import {AboutComponent} from "../about/AboutComponent"; 
import {ROUTER_DIRECTIVES} from "angular2/router"; 

import {LoginComponent} from '../login/LoginComponent' 

@Component({ 
    selector: 'home', 
/* template: ` 
    <div> 
    <div class="input"> 
     <label for="Name">Name</label> 
     <input type="text" id="name" #name> 
    </div> 
    <button (click)="onGetAll(name.value)">GET Request 
    </button> 
    <p>Response: {{response}}</p> 
    </div> 
    <a [routerLink]="['../About']">link to About component</a> 
    `,*/ 
    templateUrl: '../app/templates/dashboard.html', 
    styleUrls: ['../app/assets/light-bootstrap-dashboard.css','../app/assets/demo.css','../app/assets/pe-icon-7-stroke. css','../app/assets/bootstrap.min.css'], 
    directives : [ROUTER_DIRECTIVES] 
}) 

@CanActivate(() => LoginComponent.loggedIn()) //<-- This is not working 
export class HomeComponent implements OnInit { 
    response: string; 

    constructor() {} 

    ngOnInit() {} 

    onGetAll(name: string){ 
     console.log("Button clicked.. more code goes here " + name); 
    } 
}  

LoginCompoent.ts

import {Component} from 'angular2/core'; 
import {Router, RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router'; 
import {AuthHttp,AuthConfig, tokenNotExpired, AUTH_PROVIDERS} from 'angular2-jwt'; 

import {HomeComponent} from '../home/HomeComponent' 
import {AboutComponent} from '../about/AboutComponent' 
import {AuthService} from '../../services/AuthService' 

declare var Auth0Lock; 


@Component({ 
    selector: 'protected', 
    template: '<router-outlet></router-outlet>', 
    directives: [ROUTER_DIRECTIVES], 
    providers: [AUTH_PROVIDERS,AuthService] 
}) 

export class LoginComponent { 

    constructor(private auth: AuthService) { 
     this.auth.login(); 
    } 
    login() { 
    this.auth.login(); 
    } 

    logout() { 
    this.auth.logout(); 
    } 

    loggedIn() { 
    return tokenNotExpired(); 
    } 

}  
+0

将AuthService作为提供者添加到登录和主页组件的父组件中。通常是App组件。从登录中删除它。现在注入它在家庭和登录组件,并检查你需要什么。因为您只提供了一次验证服务,所以只会创建一个副本 – Siraj

回答

2

loggedIn方法不是static方法,因此它不会被调用,

话虽如此,理想情况下,检查用户是否登录状态,你应该调用服务。

该服务应告诉用户是否已登录,并且该服务应具有静态方法。

希望这有助于!

+0

是的,我有一个服务AuthService。它被导入LoginComponent – user2180794

+0

你可以使登录静态方法,并尝试?什么是tokennoteppired方法返回的是它来自auth0的一些方法? –

+0

感谢它的工作。 tokenexpired()是来自Auth0的布尔值。 – user2180794