Javascript Auth.signOut按预期注销
我正在使用AWS Amplify and React构建我的第一个应用程序,并使用withAuthenticator强制用户登录。当我点击“注销”按钮时,它会重定向回登录页面,但如果我刷新该页面,它会重新登录并再次显示我的应用程序,显然,这没有用,因为我需要它来完全注销用户的应用程序并从浏览器中删除他们的所有数据。我做错了什么?我甚至做了一个按钮来触发Auth.signOut(),但我仍然遇到同样的问题,就是无法从我的应用程序中注销 我甚至在这里使用了全局注销,但当我刷新页面时,它仍在重新登录。 我的代码:Javascript Auth.signOut按预期注销,javascript,reactjs,aws-amplify,Javascript,Reactjs,Aws Amplify,我正在使用AWS Amplify and React构建我的第一个应用程序,并使用withAuthenticator强制用户登录。当我点击“注销”按钮时,它会重定向回登录页面,但如果我刷新该页面,它会重新登录并再次显示我的应用程序,显然,这没有用,因为我需要它来完全注销用户的应用程序并从浏览器中删除他们的所有数据。我做错了什么?我甚至做了一个按钮来触发Auth.signOut(),但我仍然遇到同样的问题,就是无法从我的应用程序中注销 我甚至在这里使用了全局注销,但当我刷新页面时,它仍在重新登录。
import React from 'react';
import logo from './SE_logo.jpg';
import './App.css';
import Amplify, { API, Auth } from 'aws-amplify';
import {withAuthenticator} from 'aws-amplify-react';
import '@aws-amplify/ui/dist/style.css';
async function onSignOutClick() {
//await Auth.signOut()
// .then(data => console.log(data))
// .catch(err => console.log(err));
console.log(Auth.signOut());
}
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<button onClick={onSignOutClick}>Log Out</button>
</header>
</div>
);
}
export default withAuthenticator(App, true);
从“React”导入React;
从“/SE_logo.jpg”导入徽标;
导入“/App.css”;
从“aws Amplify”导入Amplify,{API,Auth};
从“aws放大反应”导入{withAuthenticator};
导入“@aws amplify/ui/dist/style.css”;
异步函数onSignOutClick(){
//等待授权注销()
//.then(数据=>console.log(数据))
//.catch(err=>console.log(err));
console.log(Auth.signOut());
}
函数App(){
返回(
注销
);
}
使用验证器导出默认值(App,true);
您可以像这样在注销后尝试重定向用户
异步函数handleLogout(){
等待Auth.signOut();
userHasAuthenticated(false);
history.push(“/login”);
}
您可以使用本教程设置浏览器历史记录并重定向用户:
删除本地存储数据/cookies/ect 或 试试这个
async onSignOutClick() {
await Auth.signOut()
.then(data => console.log(data))
.catch(err => console.log(err));
}
我通过从我的Apmlify.configure部分删除以下代码修复了它,不确定它的作用,但我在AWS文档中,所以我把它留在了我的文档中。我试图删除所有Cookie和本地存储内容,但它破坏了我的登录,只是不断出现没有当前用户的情况,因此我发现删除下面的代码是解决问题的方法,它也解决了我没有注销的问题
cookieStorage: {
// REQUIRED - Cookie domain (only required if cookieStorage is provided)
domain: '.mydomain.co.uk',
// OPTIONAL - Cookie path
path: '/',
// OPTIONAL - Cookie expiration in days
expires: 365,
// OPTIONAL - Cookie secure flag
// Either true or false, indicating if the cookie transmission requires a secure protocol (https).
secure: true
},
您是否使用某种本地存储或cookie来持久化用户的
已验证的状态?我不确定我刚刚开始使用放大和验证,所以我将所有内容都留给放大框架,所以它可能正在某个地方存储访问令牌,所以当我刷新应用程序时,它会找到它们,知道它们仍然有效,并直接进入应用程序,而不是再次提示登录。我得到的结果是userHasAuthenticated未定义您必须创建一个新状态userHasAuthenticated以跟踪用户状态,但你也可以暂时删除该行,因为主要目标是将用户重定向到登录屏幕当我调用Auth.signOut时,重定向到登录屏幕从来都不是问题。它重定向回登录屏幕,但我单击刷新或点击F5,它将返回到我的应用程序,因此基本上自动重新登录,我需要它完全注销,就像一个新用户打开浏览器进入我的网站,它将以前一个用户的身份登录。不,它会重定向回登录页面,但如果我按F5,它会直接登录回应用程序。你能提供身份验证注销请求的console.log吗?它会返回一个承诺,状态为已解决,值为未定义。你能提供一个示例吗?我已添加到我的问题:)