处理Angular 2中的身份验证重定向

时间:2017-02-03 06:32:48

标签: http angular authentication url-redirection cas

我们有一个基于Angular 2的Web应用程序,它从安全的REST-API中检索数据。

在第一次REST-API请求时,它将返回一个带有重定向(302)响应的URL,用于启动GET请求。 Angular 2不会自动重定向到此URL,并且请求失败。 请注意,使用集中式身份验证系统已完成对REST-API的登录,并且此重定向不需要显示登录页面并从用户获取输入。它只需要调用GET请求。

我们如何向提供的重定向URL(来自HTTP:302响应)发起GET请求并自动检索数据?

如果我们从浏览器转到REST-API调用,它将自动重定向到给定的URL并返回数据。

用于启动REST-API调用的Angular源

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Response, Headers, RequestOptionsArgs, URLSearchParams, RequestOptions } from '@angular/http';

this.http.get(url, options)
             .subscribe(
               (response: Response) => {
                 // handle response
               },
               (error: any) => {
                 //handle error
               }
             );

浏览器控制台错误

enter image description here

请求和回复 enter image description here

1 个答案:

答案 0 :(得分:0)

我目前面临着同样的问题,尽管原因不同。我有多个微服务,并且正在使用路由器,因此角度前端只需要了解该路由器。现在,当角度前端需要特定的微服务时,我只需要调用路由器然后将重定向返回到正确的微服务。这样做的好处是前端只需要了解一个微服务,我可以自由添加,删除,重命名等其他微服务。

这意味着我的路由器微服务几乎可以为所有内容返回307响应。我在角度方面实现它的方法是仅测试此HTTP状态代码的响应。如果我得到307,我知道它是我的路由器重定向。然后我可以请求位置标题并将我的请求重新发送到该位置。

我认为这对您来说完全相同,只需测试您的重定向HTTP状态代码的响应。如果您获得其中一个重定向代码,请从响应标头中获取位置,然后将请求重新发送到该位置。