如何在Safari中清除基本身份验证?我的代码适用于Chrome,Firefox等。但不是Safari。
我希望在没有浏览器登录对话框的情况下退出(纯粹的javascript应用程序)。
if(navigator.userAgent.indexOf('MSIE') > -1) {
document.execCommand('ClearAuthenticationCache', 'false');
//blabla
}
else {
$.ajax({
url: '/api/v1',
username: '_logout',
statusCode: {
401: function() {
//blabla
}
}
});
}
服务器端:
if(isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER'] == '_logout') {
(new \App\Http\Response())
->setHeader('WWW-Authenticate', 'Basic realm="app"')
->send(401, 'Unauthorized');
}
与Firefox&合。没有浏览器登录提示。 但是在我的应用程序中点击退出按钮后,我从Safari浏览器获得了一个登录对话框。
当然,如果我不发送WWW-Authenticate标头,它会起作用·但是我们没有真正的注销,因为浏览器不会清除auth缓存。并且每次请求都会向“_logout”用户发送Authorization标头,直到我再次使用新用户登录。
如果没有发送WWW-Authenticate,我无法覆盖Authorization标头。浏览器将始终采用缓存值。例如,我使用基本身份验证登录然后注销(服务器只发送没有WWW-Authenticate的401)。好的,现在我想使用Bearer令牌登录,但这不起作用,因为浏览器采用旧的缓存基本字符串。
Da .. Safari ......