ajax - 需要 e.preventDefault 将 JWT 保存到 localStorage
问题描述
出于某种原因,在尝试登录时,我需要使用 e.preventDefault(防止页面重新加载),以便通过 AJAX 调用将我的 JWT 保存到本地存储中。所以当我有这个时:
handleLogin(e) {
//Without e.preventDefault, the jwt token is not save -> cannot access api
e.preventDefault();
const email = $('#email').val()
const password = $('#password').val()
const request = {"auth": {
"email": email,
"password": password
}}
$.ajax({
url: "http://localhost:5000/api/user_token",
type: "POST",
data: request,
dataType: "json",
success: function (result){
console.log(result.jwt)
localStorage.setItem("jwt", result.jwt)
}
})
}
这是我的简单表格
render(){
return(
<div>
<form>
<input
name="email"
id="email"
type="email"
/>
<input
name="password"
id="password"
type="password"
/>
<button
onClick={this.handleLogin}
>Login</button>
<button
onClick={this.handleLogout}
>Logout</button>
</form>
<button onClick={this.getUsers}>Get Users</button>
{
this.state.users
}
</div>
)
}
我希望我的页面在提交成功登录后重新加载/转到不同的页面。在 create-react-app 上并使用 Rails API 5
解决方案
在你的情况下,你可以试试这个:
success: function (result){
console.log(result.jwt)
localStorage.setItem("jwt", result.jwt)
//page reload
window.location.reload(true);
// or route to another page
window.location.href = 'foo'; // any route
}
但我建议使用反应路由器,这样你的应用程序就永远不会失去它的状态。如果你有任何疑问,你可以问。
推荐阅读
- c# - 异步方法中的 Task.Run() 导致线程池饥饿?
- node.js - TypeError:“x”不是节点js中的函数
- javascript - 如何将 JSON 数据从 ejs 传递到普通的内联 javascript
- html - 如何制作适合圆形导航栏的圆形 div?
- angular - ngx-infinite-scroll 调用函数只有 2 次?
- package - Ocaml - 尝试编译时出现语法错误
- azure - Azure VM 扩展更新失败
- amazon-cloudformation - 在 AWS CDK 中使用 Parameter Store 值的最佳方式是什么
- azure - 是否可以在位于 Github 的 YML 中签出 Gitlab 存储库?
- javascript - UI 不会在状态更改时更新