2017-03-18 90 views
1

我有單頁REST應用程序,我試圖添加一些非常簡單的授權。只需登錄,無需註冊。 我正在使用帶有簡單PDO身份驗證器的Mika Tuupola的HTTP基本身份驗證中間件。這是我的代碼的一部分:Slim HttpBasicAuth

require '../vendor/autoload.php'; 
    require '../src/config.php'; 

    $app = new Slim\App(['settings' => $config]); 


    $container = $app->getContainer(); 
    $container['db'] = function ($c) { 
    $db = $c['settings']['db']; 
    $pdo = new PDO("mysql:host=" . $db['host'] . ";dbname=" . $db['dbname'], 
     $db['user'], $db['pass']); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
    return $pdo; 
}; 


$app->add(new \Slim\Middleware\HttpBasicAuthentication([ 
    "path" => "/roomPictures", 
    "realm" => "Protected", 
    "authenticator" => new PdoAuthenticator([ 
     "pdo" => $pdo 
    ]) 
])); 


require '../src/routes.php'; 

$app->run(); 

重新加載mypage.dev/roomPictures後,我剛剛得到500內部服務器錯誤。 你們有什麼想法我可能做錯了嗎?

我不知道我是否理解這個權利,但是在觸發/ roomPictures後,系統對話窗口詢問用戶名和密碼應該出現?

在此先感謝!

+0

看看你的錯誤日誌。 –

+0

重複的問題,看到你的答案[這裏](http://stackoverflow.com/questions/36168362/slim-basic-authentication)。 –

+0

它不完全相同,在我看來 – marek

回答

1

以下任行添加到您的代碼:

use Slim\Middleware\HttpBasicAuthentication\PdoAuthenticator; 

或可替代實例化中間件爲:

$app->add(new Slim\Middleware\HttpBasicAuthentication([ 
    "path" => "/roomPictures", 
    "realm" => "Protected", 
    "authenticator" => new Slim\Middleware\HttpBasicAuthentication\PdoAuthenticator([ 
     "pdo" => $pdo 
    ]) 
])); 
+0

我試過第二個選項。在行「pdo」=> $ pdo中,編輯器說$ pdo是一個未定義的變量。我怎麼能解決這個問題? – marek

+0

定義$ pdo變量或者在您定義$ pdo變量的位置傳遞$ container ['db']。 –

+0

是這樣的? $ app = new Slim \ App(['settings'=> $ config]); $ pdo_var = $ container ['db'];然後「pdo」=> $ pdo_var ??? – marek