我是ReactJS的新手。Reactjs提取身份驗證和訪問令牌,無法解析響應
我正在使用Chrome瀏覽器。
我正在嘗試使用ReactJS在頁面中創建登錄。該頁面使用用戶名和密碼很簡單。身份驗證發生在我們的SSO服務器上,意味着我必須使用獲取調用在服務器上發佈數據,並獲得access_token
作爲迴應。
問題如下:
我沒有得到控制檯的響應。但是,當我查看開發人員工具的「網絡」選項卡時,可以看到有一個有效的響應,其中包含所有必填字段,其中包括access_token
。 現在肯定我應該如何解析這個。
這是因爲fetch
是異步調用?
這是我的整個頁面代碼。
P.S:某些代碼沒有得到格式化。
import React, {Component} from 'react';
import '../App/App.css';
import {FormGroup, FormControl, InputGroup} from 'react-bootstrap';
class Auth extends Component {
constructor(props) {
super(props);
this.state = {
userid: '',
password: '',
accessToken: ''
}
}
submit() {
console.log('state', this.state);
const BASE_URL = 'MY SSO URL';
const params = {
'grant_type': 'password',
'username': this.state.userid,
'password': this.state.password,
'client_secret': 'secred',
'client_id': 'client_id',
};
const formData = new FormData();
for (let p in params) {
formData.append(p, params[p]);
}
const headers = {
'Access-Control-Allow-Origin': '*'
};
const request = {
method: 'POST',
headers: headers,
body: formData,
mode: 'no-cors'
};
fetch(BASE_URL, request)
.then((response) => response.text())
.then((responseText) => {
console.log('text',responseText);
})
.catch((error) => {
console.warn(error);
});
console.log('all done');
}
render() {
return (
<div className="login">
<div className="legend">Signin</div>
<FormGroup>
<InputGroup>
<div className="input">
<FormControl
type="text"
placeholder="Enter User Id or email"
onChange={event => this.setState({userid: event.target.value})}
onKeyPress={
event => {
if (event.key === 'Enter') {
this.submit()
}
}}
/>
</div>
<div className="input">
<FormControl
type="password"
placeholder="enter password"
onChange={event => {
console.log(event.target.value)
this.setState({password: event.target.value})
}}
onKeyPress={
event => {
if (event.key === 'Enter') {
this.submit()
}
}}
/>
</div>
<FormControl
type="submit"
onClick={() => this.submit()}
/>
</InputGroup>
</FormGroup>
</div>
)
}
}
export default Auth;
我試圖response.json()
這給誤差:Unexpected end of input
。
非常感謝您使用no-cors和頭文件'Access-Control-Allow-Origin':'*',如果我不使用這些,我會收到錯誤信息。但我的curl命令工作正常,沒有問題,因此我有點困惑,我的前端代碼中缺少什麼。 – artofabhishek
這是我得到的,如果我刪除標題和no-cors「沒有'Access-Control-Allow-Origin'標題出現在請求的資源上,原因'http:// localhost:3000'因此不被允許訪問。一個不透明的響應滿足你的需求,設置請求的模式爲'no-cors'來取消禁用CORS的資源,但是curl是好的,沒有問題 – artofabhishek
所以是的問題是BASE_URL服務器沒有發送Access-Control-Allow-Origin響應頭我更新了上面的答案以添加更長的解釋,它在curl中工作的原因是curl並不會根據它是否找到Access- Control-Allow-Origin響應頭,但是瀏覽器可以。 – sideshowbarker