header 中的 Azure AD 持有者令牌,用于验证对 Web API 的请求 - 更新方法有问题
Azure AD bearer Token in header to authenticate request to web API - Problem with update method
请问我们如何使用不记名令牌 UDPATE 记录。下面是我的 Service.js 和 authProvider.js 的代码。现在,它授权 API 但不更新记录。当我在开发工具中检查时,请求方法显示 'GET' 而不是 'PUT' 进行更新。而我的 GET 方法(authFetch 和 GET)工作正常(我能够通过授权从数据库中检索记录)。谁能指出我正确的方向?
service.js:
export async function getItem(ItemNo) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'GET');
}
export async function updateItem(ItemNo, data) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'PUT', data);
}
authProvider.js:
import { MsalAuthProvider, LoginType } from 'react-aad-msal';
//authFetch will return fetch method with ID Token in Authorization header.
export const authFetch = async (url, method, body) => {
const token = await authProvider.getIdToken();
return fetch(url, {
method: body,
headers: {
Authorization: 'Bearer ' + token.idToken.rawIdToken,
'Content-Type': 'application/json',
},
body: method === 'PUT' ? JSON.stringify(body) : undefined
});
};
组件中:
FetchItem.js:
async updateTutorial) {
await updateItem(this.state.currentItem.itemNo,
this.state.currentItem).then(
(response) => {
if (response.ok) {
response.json()
.then((responseData) => {
this.setState({
isLoading: false,
message: "Item updated successfully!"
})
});
}
else if (response.status === 401) {
throw new Error("User not authorized");
}
else {
throw new Error("Not working");
}
})
.catch((err) => {
console.error(err);
this.setState({ isLoading: false, currentItem: 'Error: ' + err.message });
});
}
您可以尝试将 authFetch
方法更改为:
export const authFetch = async (url, method, body) => {
const token = await authProvider.getIdToken();
return fetch(url, {
method: body,
headers: {
Authorization: 'Bearer ' + token.idToken.rawIdToken,
'Content-Type': 'application/json',
//'Accept': 'application/json' // Add this line in addition
},
body: method === 'PUT' ? JSON.stringify(body) : undefined
});
};
然后像下面这样称呼他们:
export async function getItem(Serienr) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'GET');
}
export async function updateItem(ItemNo, data) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'PUT', data);
}
请注意,上面的代码未经测试,因此您可能 运行 遇到问题。
请问我们如何使用不记名令牌 UDPATE 记录。下面是我的 Service.js 和 authProvider.js 的代码。现在,它授权 API 但不更新记录。当我在开发工具中检查时,请求方法显示 'GET' 而不是 'PUT' 进行更新。而我的 GET 方法(authFetch 和 GET)工作正常(我能够通过授权从数据库中检索记录)。谁能指出我正确的方向?
service.js:
export async function getItem(ItemNo) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'GET');
}
export async function updateItem(ItemNo, data) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'PUT', data);
}
authProvider.js:
import { MsalAuthProvider, LoginType } from 'react-aad-msal';
//authFetch will return fetch method with ID Token in Authorization header.
export const authFetch = async (url, method, body) => {
const token = await authProvider.getIdToken();
return fetch(url, {
method: body,
headers: {
Authorization: 'Bearer ' + token.idToken.rawIdToken,
'Content-Type': 'application/json',
},
body: method === 'PUT' ? JSON.stringify(body) : undefined
});
};
组件中: FetchItem.js:
async updateTutorial) {
await updateItem(this.state.currentItem.itemNo,
this.state.currentItem).then(
(response) => {
if (response.ok) {
response.json()
.then((responseData) => {
this.setState({
isLoading: false,
message: "Item updated successfully!"
})
});
}
else if (response.status === 401) {
throw new Error("User not authorized");
}
else {
throw new Error("Not working");
}
})
.catch((err) => {
console.error(err);
this.setState({ isLoading: false, currentItem: 'Error: ' + err.message });
});
}
您可以尝试将 authFetch
方法更改为:
export const authFetch = async (url, method, body) => {
const token = await authProvider.getIdToken();
return fetch(url, {
method: body,
headers: {
Authorization: 'Bearer ' + token.idToken.rawIdToken,
'Content-Type': 'application/json',
//'Accept': 'application/json' // Add this line in addition
},
body: method === 'PUT' ? JSON.stringify(body) : undefined
});
};
然后像下面这样称呼他们:
export async function getItem(Serienr) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'GET');
}
export async function updateItem(ItemNo, data) {
return await authFetch(config.apiBaseUrl + `/item/${ItemNo}`, 'PUT', data);
}
请注意,上面的代码未经测试,因此您可能 运行 遇到问题。