Reactjs 使用Hello.js在没有登录会话的情况下响应Microsoft Outlook日历数据
我正在创建一个React日历,它使用客户端JavaScript SDK“hello.js”和Microsoft Graph从“Microsoft Outlook日历”获取数据(对于设置,我还遵循了以下指南:) 使用hello.login我的应用程序显示日历没有任何问题…但不幸的是,我必须在没有登录会话的情况下显示日历 这是我的代码:Reactjs 使用Hello.js在没有登录会话的情况下响应Microsoft Outlook日历数据,reactjs,microsoft-graph-api,outlook-restapi,hello.js,outlook-calendar,Reactjs,Microsoft Graph Api,Outlook Restapi,Hello.js,Outlook Calendar,我正在创建一个React日历,它使用客户端JavaScript SDK“hello.js”和Microsoft Graph从“Microsoft Outlook日历”获取数据(对于设置,我还遵循了以下指南:) 使用hello.login我的应用程序显示日历没有任何问题…但不幸的是,我必须在没有登录会话的情况下显示日历 这是我的代码: class CalendarView扩展组件{ 建造师(道具){ 超级(道具); 你好,init({ 微软:{ id:APP_id, oauth:{ 版本:2,
class CalendarView扩展组件{
建造师(道具){
超级(道具);
你好,init({
微软:{
id:APP_id,
oauth:{
版本:2,
作者:'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
},
范围_delim:“”,
形式:假,,
范围:范围,
},
});
const{startDate,endDate}=this.props;
此.state={
//事件:[],
startDataTime:startDate.toISOString(),
endDataTime:endDate.toISOString(),
令牌:hello('microsoft')。getAuthResponse()。访问令牌,
};
}
我找到了解决方案
我必须打两个axios电话:
- 一个用于获取令牌(带有POST)
- 一个用于在我的microsoft graph查询中使用令牌(带有GET)
- grant_type:我们想要使用的流,在我的例子中是client_凭据
- 客户端id:应用程序I的客户端id(应用程序id)
在注册步骤中创建 - 客户机密:我在注册中创建的客户机密 步骤
- 资源:我要访问的资源的名称, 在这种情况下
componentDidMount(){
轴心柱(`https://cors-anywhere.herokuapp.com/https://login.microsoftonline.com/${AZURE\u ACTIVE\u DIRECTORY\u TENANT\u NAME}/oauth2/token`,
`grant\u type=${grant\u type}和client\u id=${APP\u id}和client\u secret=${secret}和resource=${resource}`)。然后(res=>this.setAccessToken(res.data.access\u token))
.catch((错误)=>{
console.error(error.response);
});
}
setAccessToken(令牌){
if(typeof token==='string')this.setState({accessToken:token});
}
感谢您发布您的方法。关于您的应用程序有几个问题:1.您是否使用node.js backend获取令牌?2.您是否在将令牌发送到MS Graph之前验证获取的令牌?3.我的理解是,您使用的是client_凭据授权类型,因为您没有用户登录。对吗?请查看具有以下权限的库:NDLS令牌请求和验证。您好。为了获取令牌,我在react应用程序中构建了一个组件,在其中,我在componentDidMount()中进行了一个Axios Post调用(我使用Axios获取MicrosoftAPI,因此令牌)并在componentDidMount()中进行了“setState”操作(我只是使用函数setAccessToken检查我得到的值是否是字符串).确切地说,我使用了APP_ID、SECRET、RESOURCE、GRANT_TYPE、AZURE_ACTIVE_DIRECTORY_TENANT_NAME,因为我必须在没有登录会话的情况下显示日历中的事件。我希望我让你明白我做了什么,对不起,我仍然是React world中的新手。我只是把它留在这里: