javascript - 在 Chrome 中使用 jquery 隐藏基本身份验证弹出窗口

标签 javascript jquery ajax google-chrome

我使用此代码对 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 框架

最佳答案

如果您没有服务器控制权,则没有(至少我不知道)方法可以防止这种情况。如果您确实拥有服务器控制权,您可以做两件事:

  1. 将响应状态代码从标准 401 更改为其他代码。但是,这通常不被称为最佳实践,因为状态代码不会说明实际问题(身份验证错误)。

  2. 将响应 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/

相关文章:

带变量的 JavaScript 函数不起作用

jquery - 编写此脚本的更漂亮的方式(点击时隐藏跨度,显示输入)

javascript - 通过 ajax/jQuery 向服务器发出 ajax POST 请求

javascript - Javascript 函数未定义 JSP 错误

c# - 删除 IE 中的 cookie 错误?

javascript - 通过 css 删除 div 的用户脚本

javascript - jVectorMap 使用 Angularjs 渲染很小

javascript - 使用ajax在黑莓上发送授权 header

javascript - 使用 Ajax 显示数据库中的数据

javascript - typescript 中带有参数类型的 Angular ui-state