我使用此代码对 REST API 进行基本认证。不幸的是,当用户/密码错误时,Google Chrome 会显示一个弹出窗口。 Firefox 不会这样做。
$.ajax({
type: "GET",
url: "/ad",
dataType: 'json',
async: false,
username: 'username',
password: 'password',
success: function (){
alert('success');
return false;
},
error: function(){
alert('error');
return false;
}
});
编辑1:
我使用 Laravel 框架
最佳答案
如果您没有服务器控制权,则没有(至少我不知道)方法可以防止这种情况。如果您确实拥有服务器控制权,您可以做两件事:
将响应状态代码从标准 401 更改为其他代码。但是,这通常不被称为最佳实践,因为状态代码不会说明实际问题(身份验证错误)。
将响应 header
WWW-Authenticate: Basicrealm="your_realm"
更改为自定义值,例如WWW-Authenticate: x-Basicrealm="your_realm"
> (注意那里的x-
!)。
这应该可以防止任何默认的登录处理。
更新1
关于使用 Laravel this将是设置正确响应 header WWW-Authenticate
的示例(将 Basic
更改为 x-Basic
):
Route::filter('auth', function()
{
$credentials = ['email' => Request::getUser(), 'password' => Request::getPassword()];
if (!Auth::once($credentials)) {
$response = ['error' => true, 'message' => 'Unauthorized request'];
$code = 401;
$headers = ['WWW-Authenticate' => 'x-Basic'];
return Response::json($response, $code, $headers);
}
});
关于javascript - 在 Chrome 中使用 jquery 隐藏基本身份验证弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170264/