【发布时间】:2017-06-11 06:02:45
【问题描述】:
我正在使用NodeJS 为服务器端和Angular 2 为客户端构建Web 应用程序。
在应用程序中,我使用ADFS 对用户进行身份验证。
用户浏览网站并自动重定向到ADFS认证服务器。用户完成身份验证后,他重定向回我的应用程序,我从ADFS 服务器获取用户数据。
我使用passport-saml 包来实现身份验证,它工作正常。
用户现在存储在req.user。
现在我需要在客户端使用用户数据。
经过一番研究,我发现将用户数据从服务器传递到客户端可以很简单:
router.get('/user/current', AuthMiddleware.requireLogin, (req: express.Request, res: express.Response) => {
return res.json(req.user);
});
这也有效。
现在对于客户端: 我创建了一个服务来获取经过身份验证的用户:
@Injectable()
export class AuthService {
private authUrl = 'http://localhost/api/user/current';
private currentUser: User;
constructor(private http: Http) {
this.getUser().subscribe(user => {
this.currentUser = user;
});
}
getUser(): Observable<User> {
return this.http.get(this.authUrl)
.map((res: Response) => res.json())
.catch(error => Observable.throw(error.json().error || 'Server Error'));
}
isAuthenticated(): boolean {
return !!this.currentUser;
}
}
所以getUser 方法返回一个Observable 与我的用户,我可以在我的客户端使用它。
但我的问题是:
我应该将AuthService 注入每个使用经过身份验证的用户的组件吗?
如果是这样,我应该每次调用getUser 并等待Observable 返回用户的数据,还是应该为经过身份验证的用户使用公共参数?
(例如在AuthService 中设置currentUser 参数public 然后只使用authService.currentUser?)
【问题讨论】:
-
你曾经能够让它工作吗?如果可以,您可以分享您的解决方案吗?
标签: node.js angular authentication passport.js