tuupola / slim-basic-auth

PSR-7 and PSR-15 HTTP Basic Authentication Middleware
MIT License
440 stars 66 forks source link

'Call to undefined method Zend\Diactoros\Response::write' [conflict with php-http/discovery:^1.6] #81

Closed saippuakauppias closed 5 years ago

saippuakauppias commented 5 years ago

Hello!

I use sentry/sdk for catch all exceptions from site, base package sentry/sentry require php-http/discovery: ^1.6.1. But with this package I get error like: Call to undefined method Zend\Diactoros\Response::write(). Traceback:

#0 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/slim-basic-auth/src/HttpBasicAuthentication.php(211): {closure}(Object(Zend\Diactoros\Response), Array)
#1 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/slim-basic-auth/src/HttpBasicAuthentication.php(144): Tuupola\Middleware\HttpBasicAuthentication->processError(Object(Zend\Diactoros\Response), Array)
#2 /Users/sks/Sites/slim-basic-auth/vendor/tuupola/callable-handler/src/DoublePassTrait.php(47): Tuupola\Middleware\HttpBasicAuthentication->process(Object(Slim\Http\Request), Object(Tuupola\Middleware\CallableHandler))
#3 [internal function]: Tuupola\Middleware\HttpBasicAuthentication->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#4 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Tuupola\Middleware\HttpBasicAuthentication), Array)
#5 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#6 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#7 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#8 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/App.php(406): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#9 /Users/sks/Sites/slim-basic-auth/vendor/slim/slim/Slim/App.php(314): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#10 /Users/sks/Sites/slim-basic-auth/index.php(30): Slim\App->run()
#11 /Users/sks/.composer/vendor/laravel/valet/server.php(158): require('/Users/sks/Site...')
#12 {main}

Reproduce

composer.json:

{
    "require": {
        "tuupola/slim-basic-auth": "^3.2",
        "slim/slim": "~3.10.0",
        "sentry/sdk": "^2.0"
    }
}

index.php

<?php
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';

$config = [
    'settings' => [
        'displayErrorDetails' => true,
    ],
];

$app = new \Slim\App($config);

$app->get('/', function (Request $request, Response $response, array $args) {
    $response->getBody()->write("Hello");
    return $response;
});

$app->add(new Tuupola\Middleware\HttpBasicAuthentication([
    "relaxed" => [$_SERVER['HTTP_HOST']],
    "users" => [
        "root" => 'pwd',
    ],
    "error" => function($response, $args) {
        return $response->write("error");
    }
]));

$app->run();

My question is: how to fix it (without drop sentry)?

I tried to repair, but I dont know where closure Zend\Diactoros\Response gets into Tuupola\Middleware\HttpBasicAuthentication->processError. Downgrade sentry/sdk not possible.

saippuakauppias commented 5 years ago

Found hotfix for me: dont use custom error response. For upper code need to remove this strings:

    "error" => function($response, $args) {
        return $response->write("error");
    }
tuupola commented 5 years ago

Zend\Diactoros\Response does not have the write method. I think you should be able to use the following:

    "error" => function($response, $args) {
        return $response->getBody()->write("error");
    }
saippuakauppias commented 5 years ago

@tuupola , thanks! Its worked! I think documentation (github & php-package readme) need to be update.

Close Issue.

tuupola commented 5 years ago

Yep, updated the README. Thanks for the heads up!