我试图在登录过程后获得连接的用户模型,
首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL
然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中
export class User {
constructor(
public email:string,
public passowrd:string,
public firstname:string,
public lastname:string,
public token:string
){}
}
import { Injectable } from '@angular/core';
import { User } from "../_models/user";
import { Observable } from 'rxjs/Rx';
import { Http, Headers, Response } from '@angular/http';
import { Router } from "@angular/router";
import 'rxjs/add/operator/map';
@Injectable()
export class AuthenticationService {
private user: User;
constructor(private http: Http,private router:Router) {
// set token if saved in local storage
var currentUser = JSON.parse(localStorage.getItem('currentUser'));
this.user = currentUser;
}
getUser(){
return this.user;
}
login(email:string,password:string): Observable<boolean> {
const body = JSON.stringify({ email: email, password: password });
const headers = new Headers({
'Content-Type' : 'application/json'
});
return this.http.get("https://test.firebaseio.com/users.json",{headers:headers})
.map(
(response: Response) => {
// login successful if there's a token in the response
let token = response.json() && response.json().token;
if(token){
// set user object
this.user = response.json();
// store username and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(this.user));
// return true to indicate successful login
return true;
} else {
// return false to indicate failed login
return false;
}
//return response.json();
}
);
}
logout(): void {
// clear token remove user from local storage to log user out
this.user = null;
localStorage.removeItem('currentUser');
this.router.navigate(['/']);
}
}
这是我的守卫:
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { AuthenticationService } from '../_services/index';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private router: Router,private authService:AuthenticationService) { }
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot): boolean {
if (this.authService.getUser().token) {
// logged in so return true
return true;
}
this.router.navigate(['/login']);
return false;
}
}
您的登录方法不是静态的,这意味着您只能在至少创建了AuthenticationService
的一个实例之后才可以使用登录。
您可以在构造函数中设置CurrentUser
。并且在登录后不更新它。
为了修复它,添加:
public getAuthKey() {
return localStorage.getItem('currentUser');
}
我使用“angular2网页包”和“angular2/表格,可见”,但遇到错误,需要帮助。。 有一个自定义表单验证程序-- 我可以找到文件"/projection_direction/node_modules/rxjs/操作员/DebounceTime.js" 为什么会有这样的错误- 类型“Observable”上不存在属性“debouceTime”。
我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。
升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:
获取错误:(类型窗口中不存在属性“MktoForms2”
我试图在TypeScript中使用“时刻-持续时间格式”,但即使它有效,webpack仍不断抱怨它无法在线找到“格式”方法: 这里是package.json tsconfig.json: 在(angular2)组件中: 我也试过了 但这并不能改变什么: [at-loader]./src/app/组件/建筑/商店/shop.component.ts:190中的错误:81 TS2339:属性“格式”在
嗨,我正在使用Angular 2 final和router 3.0。我想过滤从 我想做的是: 可以是instanceOf,或,但我只想要。但是我得到一个错误