withCredentials双簧管请求

时间:2014-12-05 19:57:59

标签: angularjs curl xmlhttprequest

我目前正在使用Neo4j图形数据库,它可以免费提供REST网址。我试图将它连接到一个提供双簧管客户端流媒体的角度模块:https://github.com/RonB/angular-oboe

我正在尝试更好地了解如何在我的请求标头中添加用户名:密码凭据以转录此curl命令

> curl --user username:password http://localhost:7474/auth/list

https://github.com/neo4j-contrib/authentication-extension

在angular-oboe README的Usage部分中,它概述了请求的参数

    $scope.myData = Oboe({
        url: '/api/myData',
        pattern: '{index}',
        pagesize: 100
    });

我有预感为Oboe repo上列出的withCredentials添加一行 https://github.com/jimhigson/oboe.js-website/blob/master/content/api.md

双簧管({    url:String,    method:String,//可选    headers:Object,//可选    body:String | Object,//可选    cached:Boolean,//可选    withCredentials:布尔值//可选,仅限浏览器 })

但我不知道在哪里放置用户名:密码对。

您可以提供任何帮助,非常感谢您的合作。

1 个答案:

答案 0 :(得分:1)

angular-oboe服务将所有参数传递给Oboe函数,因此您可以指定headers参数。要确保在请求上允许身份验证,请指定withCredentials:true。 基本身份验证可以通过以下方式实现:

    .controller('StreamingCtrl', function($scope, Oboe) {
        $scope.contacts = [];
        // the contacts streamed
        $scope.contacts = Oboe({
            url: 'http://some.restfull.srv/contacts',
            pattern: '{contactid}',
            pagesize: 100,
            withCredentials: true,
            headers: {
                // Base 64 encoded Basis authentication
                Authorization: 'Basic ' + btoa('username:password')
            }
        });
    })

btoa函数将Base 64编码用户名和密码。

编辑: 自第一个答案以来,angular-oboe工厂已被改变,并且返回了一个promise而不是json对象数组。

这是使用最新版本的方法:

angular.module('MyApp')
    .controller(['$scope', 'Oboe', function($scope, Oboe) {
        $scope.myData = [];
        Oboe({
            url: '/api/myData',
            pattern: '{index}',
            withCredentials: true,
            headers: {
                Authentication: 'Basic '  + btoa('yourusername:yourpassword')
            }
        }).then(function() {
            // finished loading
        }, function(error) {
            // handle errors
        }, function(node) {
            // node received
            $scope.myData.push(node);
        });
    }]);