Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用Hello.js在没有登录会话的情况下响应Microsoft Outlook日历数据_Reactjs_Microsoft Graph Api_Outlook Restapi_Hello.js_Outlook Calendar - Fatal编程技术网

Reactjs 使用Hello.js在没有登录会话的情况下响应Microsoft Outlook日历数据

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,

我正在创建一个React日历,它使用客户端JavaScript SDK“hello.js”和Microsoft Graph从“Microsoft Outlook日历”获取数据(对于设置,我还遵循了以下指南:)

使用hello.login我的应用程序显示日历没有任何问题…但不幸的是,我必须在没有登录会话的情况下显示日历

这是我的代码:

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)
我必须在这里注册我的应用程序,以便获得客户ID和密码

在我需要使用以下正文参数向Azure Active Directory身份验证端点发送POST消息之后:

  • grant_type:我们想要使用的流,在我的例子中是client_凭据
  • 客户端id:应用程序I的客户端id(应用程序id)
    在注册步骤中创建
  • 客户机密:我在注册中创建的客户机密 步骤
  • 资源:我要访问的资源的名称, 在这种情况下
因此,我使用以下axios POST请求创建了一个组件:

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中的新手。我只是把它留在这里: