老師 加上{ withCredentials: true } 後刷新還是返回登入按鈕,怎麼回事
来源:7-1 根据登录权限决定页面展示(1)
weixin_慕雪0272820
2020-08-28 23:30:01
import React, { Component, Fragment } from "react";
import { Button, Modal, Input,message } from "antd";
import axios from "axios";
import'./style.css'
class Detail extends Component {
constructor(props) {
super(props);
this.clickLogin = this.showModal.bind(this);
this.showModal = this.showModal.bind(this);
this.hideModal = this.hideModal.bind(this);
this.changeName = this.changeName.bind(this)
this.changePassword = this.changePassword.bind(this)
this.checkLogin = this.checkLogin.bind(this)
this.state = {
login: false,
modal: false,
name: "",
password: ""
};
}
showModal() {
this.setState({modal:true})
}
hideModal() {
this.setState({modal:false})
}
changeName(e) {
this.setState({name:e.target.value})
}
changePassword(e) {
this.setState({ password: e.target.value });
}
checkLogin() {
const { name, password } = this.state;
const url = `http://www.dell-lee.com/react/api/login.json?user=${name}&password=${password}`
axios.get(url, { withCredentials: true }).then((res) => {
const { login } = res.data.data;
if (login) {
message.success("登入成功");
this.setState({
login: true,
modal: false,
});
} else {
message.error("登入失敗");
}
// this.setState({ login })
});
}
componentDidMount() {
const url = 'http://www.dell-lee.com/react/api/islogin.json'
axios.get(url, { withCredentials: true }).then(res => {
const login = res.data.data.login
this.setState({ login })
})
}
render() {
const { login } = this.state
return (
<Fragment>
{login ? (
<Button type="primary">登出</Button>
) : (
<Button type="primary" onClick={this.showModal}>
登入
</Button>
)}
<Modal
title="登入"
visible={this.state.modal}
onOk={() => {this.checkLogin()}}
onCancel={() => {this.hideModal();}}
>
<Input placeholder="請輸入用戶名" style={{ marginBottom: 10 }}
onChange={this.changeName} value={this.state.name}/>
<Input placeholder="請輸入密碼" type="password" value={this.state.password} onChange={this.changePassword} value={this.state.password} />
</Modal>
</Fragment>
);
}
}
export default Detail;1回答
同学你好,代码是没有问题的,是用chrome浏览器测试的吗?可能是版本的问题。由于Chrome80版本请求接口未携带cookie导致的,因为浏览器升级后对跨域接口默认的安全策略变了,需要手动修改策略,打开谷歌浏览器,地址栏输入chrome://flags/ ,然后再弹出的页面中输入SameSite,把第一个改为disable,重启浏览器,再测试就可以了

祝学习愉快!
相似问题