5

我有一个 .Net MVC WebApi 应用程序并尝试专门在 Angularjs 中编写前端。我能够通过 json 获取数据并对其进行操作,但我现在需要保护数据并将 Base64 身份验证添加到服务器的标头中。当我浏览到我的一些 .net 视图测试页面时,我得到了相应的登录框,要求输入用户/密码,这样我就可以继续获取 json。

我不知道该怎么做是将这个信息(用户/密码)传递到 Angular 在我的 $resource. 有没有完整的例子可以更好地向我展示如何做到这一点?我知道它涉及 cookie 并使用服务器传回的令牌,但我不知道如何将这些部分组合在一起。

当我把所有这些放在一起时,我希望通过所有层(DAL、RESTFUL、控制台测试层)发布一个完整的骨架示例。

所以问题是 - 在使用 AngularJS $resources 时,如何将身份验证信息插入客户端的标头中?

谢谢

4

1 回答 1

3

如果你在服务器端的标头中放置一个 cookie,AngularJS 将一直发送这个 cookie。你无事可做。

如果您想在 Header 中传递令牌而不是在 Angular 端的 cxookie 中,只需执行以下操作:$httpProvider.defaults.headers.common['X-Auth'] = yourKey;在您的配置块中。

然后,如果您想知道用户是否已登录或者他是否拥有权限,只需实现一个拦截器。这是一个简单的工厂,您将始终在您的配置块中推送 responseIntercetors。

该工厂将侦听来自服务器的每个响应,并在他的实现中检查错误情况下响应的状态代码:

401 --> 未记录 403 --> 未授权

工厂示例:

myModule.factory('myHttpInterceptor', function ($q) {
    return function (promise) {
        return promise.then(function (response) {
            // do something on success              
            return response;
        }, function (response) {
            // do something on error
            //check status 401 or 403
            return $q.reject(response);
        });
    };
});

然后将您的工厂放在配置块中的 http responseIntercetors 中,如下所示:

myModule.config(function ($httpProvider) {
    $httpProvider.responseInterceptors.push('myHttpInterceptor');
});

请记住,AngularJS 1.1.4 已弃用此解决方案(仍然不稳定)...

工厂必须有所不同,请参阅这篇文章以获取更多信息:AngularJS 拦截所有 $http JSON 响应

希望能帮助到你

于 2013-09-21T10:18:50.643 回答