gpt4 book ai didi

php - Slim 基本认证

转载 作者:行者123 更新时间:2023-12-03 20:34:09 24 4
gpt4 key购买 nike

今天是个好日子!

我在这里有一个工作的超薄代码 slim-basic-auth当我转到受限目录时,会显示:

enter image description here

一切正常,但我想要做的是将其重定向到我的登录页面,而不是显示弹出登录框。这是我的登录页面:

enter image description here

我的超薄代码:

$pdo = new \PDO("mysql:host=localhost;dbname=databasename", "username");
$app->add(new \Slim\Middleware\HttpBasicAuthentication([
"path" => "/main",
"realm" => "Protected",
"authenticator" => new PdoAuthenticator([
"pdo" => $pdo,
"table" => "accounts",
"user" => "accountUsername",
"hash" => "accountPassword"
]),
"callback" => function ($request, $response, $arguments) use ($app) {
return $response->withRedirect('/main/contacts');
}

当我尝试使用弹出登录框登录时,它可以工作,但我真的想将它重定向到我的登录页面而不是那个页面。

任何帮助将非常感激。

最佳答案

中间件实现 HTTP Basic Access Authentication .身份验证对话框通过响应 header 触发。由浏览器供应商决定如何询问凭据。大多数浏览器使用您描述的弹出登录对话框。

您尝试做的是使用 HTTP 基本身份验证的一种有点非正统的方式。但是,您可以通过删除 WWW-Authenticate 来取消登录对话框。来自响应的 header 。请注意您至少需要版本 2.0.2为了这个工作。

$app->add(new \Slim\Middleware\HttpBasicAuthentication([
"path" => ["/main"],
"authenticator" => new PdoAuthenticator([
"pdo" => $pdo,
"table" => "accounts",
"user" => "accountUsername",
"hash" => "accountPassword"
]),
"error" => function ($request, $response, $arguments) {
return $response
->withRedirect("/auth/login")
->withoutHeader("WWW-Authenticate");
}
]));

但是,使用上面的代码,您仍然必须设置 Authentication: Basic以某种方式请求 header 。一种方法是使用 AJAX 请求。
$.ajax({
url: "http://example.com/auth/login",
username: $("username").val(),
password: $("password").val(),
success: function(result) {
alert("Authorization header should now be set...");
}
});

关于php - Slim 基本认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36168362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com