angular2 router.navigate dentro de la devolución de llamada auth0
Tengo un problema al procesar una plantilla después de llamar a router.navigate dentro de una devolución de llamada para auth0lock
loginComponent.ts
import {Component, Inject} from 'angular2/core';
import {Router, ComponentInstruction} from 'angular2/router';
import {Auth} from '../auth';
declare var Auth0Lock;
@Component({
selector: 'login',
templateUrl: '/tpls/login/login.html'
})
export class LoginComponent {
private lock = new Auth0Lock('xxx', 'xxx.auth0.com');
constructor(@Inject(Router) private router: Router, @Inject(Auth) private auth: Auth) { }
logError = (err) => {
console.log(err);
}
loginSuccess = (data) => {
if(this.router.parent.lastNavigationAttempt !== undefined && this.router.parent.lastNavigationAttempt !== '/Login') {
this.router.navigateByUrl(this.router.parent.lastNavigationAttempt);
} else if(data.user.req_update) {
this.router.navigate(['Profile']);
} else {
this.router.navigate(['Home']);
}
}
ngOnInit() {
this.lock.show((err: Error, profile: any, id_token: string) => {
if(err) return this.logError(err);
return this.auth.login(profile, id_token);
});
this.auth.loginSuccess.subscribe(
data => this.loginSuccess(data),
err => this.logError(err)
);
}
}
auth.ts
import {Injectable, Inject, EventEmitter, Output } from 'angular2/core';
import {Http, Headers} from 'angular2/http';
@Injectable()
export class Auth {
...
@Output() loginSuccess = new EventEmitter();
login = (profile, id_token) => {
...
this.addUser(profile).subscribe(
data => {
this.loginSuccess.next(data.json());
},
err => {
console.log(err);
this.loginSuccess.error(err.json());
}
);
}
addUser = (user: any) => {
let body = JSON.stringify(user);
return this.http.post('/api/user/add', body, { headers: this.headers});
}
}
homeComponent.ts
import {Component, Inject, OnInit} from 'angular2/core';
import {Http} from 'angular2/http';
import {ROUTER_DIRECTIVES} from 'angular2/router'
import {Auth} from '../auth';
import {Post} from '../post/Post';
import {IPost} from '../post/IPost';
import {AuthorComponent} from '../author/authorComponent';
@Component({
selector: 'home',
templateUrl: '/tpls/home/home.html',
directives: [ROUTER_DIRECTIVES, AuthorComponent]
})
export class HomeComponent implements OnInit {
private postService: Post;
private posts: IPost[];
constructor(@Inject(Http) private http: Http, @Inject(Auth) private auth: Auth) {
console.log('constructor');
this.postService = new Post(this.http, this.auth);
this.getPosts();
}
getPosts = () => {
this.postService.all().subscribe(
data => this.getPostsCallback(data.json()),
err => this.logError(err)
);
}
getPostsCallback = (data) => {
console.log('callback');
this.posts = data;
}
logError = (err) => {
console.log(err);
}
ngOnInit() {
console.log('init');
//this.postService = new Post(this.http, this.auth);
//this.getPosts();
}
}
Incluyo el script cdn para authlock en mi página de índice. Parece que cualquier ruta por la que navego después de iniciar sesión no se procesa. La devolución de llamada de this.lock.show funciona y puedo leer las variables. Cualquier consejo es muy apreciado.
concepto basico:https://plnkr.co/edit/Oz8lY7v6q8GpH71WLtAK