0
我想实现的角度门卫检查,如果用户是在近期签署,使他们能够更改密码,更新电子邮件等如何确定用户在火力
使用记录在“最近”任角火2或角我有一个句柄给用户(firebase.User)。但是,如何检查他们是否有资格获得“最近登录”以执行敏感操作?
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { Injectable, OnInit } from '@angular/core';
import { AuthService } from './auth.service';
import * as firebase from 'firebase/app';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {
}
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.authService.user$.map((user) => {
if (user) {
// how to validate that this user is a recent login?
return true;
} else {
console.log('not authenticated');
this.router.navigateByUrl('/login');
return false;
}
}).first();
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
return this.canActivate(route, state);
}
}
哪里是'auth_time'?我尝试过'getIdToken',但它只是解析了令牌字符串。 –
我也很困惑你如何实现重新认证的流程?我找不到一个工作的例子。如果您需要在表单中传递密码以更改密码/名称等,我会得到它,但它如何与Gmail等联合登录一起使用?如何获得该方法所需的凭证对象? –
您必须解析该令牌字符串。您可以使用一些JWT解析库来执行此操作。通过联合登录,您可以使用'currentUser.reauthenticateWithPopup(provider)'或'currentUser.reauthenticateWithRedirect(provider)'。如果您已拥有Google访问令牌或ID令牌,则可以使用'currentUser.reauthenticateWithCredential(firebase.auth.GoogleAuthProvider.credential(googleIdToken,googleAccessToken))' – bojeil