使用Backbone + Slim + Tuupola基本身份验证时出现非正式错误

时间:2017-06-02 10:18:54

标签: javascript php backbone.js

我正在尝试将我的Backbone应用程序与我的服务器api连接(使用Slim),而我正在使用Tuppola / Basic Auth Middleware。

这个例子非常简单,我只是想让它发挥作用。我可以在我的服务器中直接在浏览器中实现这一点。我进入弹出窗口,输入用户名和密码,然后获取数据。

然而,当我尝试使用我的Backbone应用程序做同样的事情时,我总是得到相同的401 Unauthorized错误。 这是我的PHP代码。正如我所说,直接使用浏览器时工作正常。

我的班级容器

$container["auth"] = function ()
{
    return new \Slim\Middleware\HttpBasicAuthentication([
        "path" => "/app_rutas",
        "realm" => "Protected",
        "users" => [
            "test" => "123",
        ],
        "environment" => "REDIRECT_HTTP_AUTHORIZATION"
    ]);
};

我班级路线

class Routes
{
    public static function callbacks($app)
    {
        $app->add(                                       \Controller::class . ':middleware');
        $app->add('auth');
        $app->get('/app_rutas/clients',                  \ClientController::class . ':selectAllClients');
        $app->get('/app_rutas/client/{type}/{values}',   \ClientController::class . ':selectClient');
        $app->put('/app_rutas/client',                   \ClientController::class . ':newClient');
    }
}

这是我的js代码,我认为问题在于我无法将params正确传递给中间件。我已经尝试过很多方法。我认为这应该是不应该的。

fetchData() {
    if (!_.isEmpty(this.clients_id)) {
        this.url = this.apiUrl('client', this.clients_id);

        this.fetch({ headers: {'Authorization':'Basic test:123'} });
    }
},

提前感谢所有评论。

1 个答案:

答案 0 :(得分:1)

这是使用Backbone传递用户名:密码的正确方法:

this.fetch({ headers: {'Authorization':'Basic ' + btoa('test:123')} })

需要base64编码功能。现在它终于奏效了。