Reactjs 3腿OAuth,带React和Redux

Reactjs 3腿OAuth,带React和Redux,reactjs,react-router,redux,oauth2,Reactjs,React Router,Redux,Oauth2,在React中使用Redux使用OAuth2进行身份验证的公认方法是什么 我当前的设置涉及使用Redux Auth Wrapper包装react路由器组件,如果用户未经过身份验证,则向OAuth提供商(本例中为google)发送一个操作,以发出必要的外部URL GET请求 OAuth2需要随请求发送回调URL,因此我设置了一个react router URL端点/组件,当onComponentDidMount触发时,该端点/组件将发送操作以解析来自OAuth提供程序的返回哈希,将该数据存储在re

在React中使用Redux使用OAuth2进行身份验证的公认方法是什么

我当前的设置涉及使用Redux Auth Wrapper包装react路由器组件,如果用户未经过身份验证,则向OAuth提供商(本例中为google)发送一个操作,以发出必要的外部URL GET请求

OAuth2需要随请求发送回调URL,因此我设置了一个react router URL端点/组件,当onComponentDidMount触发时,该端点/组件将发送操作以解析来自OAuth提供程序的返回哈希,将该数据存储在redux存储中,并将用户重定向到他们最初请求的页面,存储在OAuth请求的状态参数中

这一切似乎都很烦人。在生产环境和开发环境之间管理OAuth2回调URL也很困难。有人有一个流畅的OAuth2工作流程吗


另外,我需要将Auth令牌发送给客户端,以便可以使用它发出客户端API请求,使用该令牌检查用户是否有权访问这些资源。

我想出了一个更好的解决方案,包括使用OAuth登录表单打开一个新窗口,然后由父窗口轮询以查看是否已重定向到回调URL。一旦完成,您就可以使用包含父窗口中OAuth令牌信息的哈希捕获子窗口url并关闭子窗口。然后可以解析此散列并将其添加到应用程序状态


特别有用。

以下是一个函数,它将从google获取令牌和到期数据,并将其存储在本地存储器中。可以对其进行修改,以简单地将该数据作为对象返回

函数oAuth2TokenGet(){
//TODO:首先尝试从sessionStorage获取令牌
//构建oauth请求url
const responseType='token';
const clientId='YOUR-GOOGLE-CLIENT-ID';
const redirectUri='YOUR-REDIRECT-URL';
const scope=‘电子邮件配置文件’;
const prompt='select_account';
常量url=`https://accounts.google.com/o/oauth2/v2/auth?response_type=${responseType}&client_id=${clientId}&redirect_uri=${redirectUri}&scope=${scope}&prompt=${prompt}`;
//打开一个新窗口
const win=window.open(url,'name','height=600,width=450');
如果(赢)赢。集中精力();
const pollTimer=window.setInterval(()=>{
试一试{
if(!!win&&win.location.href.indexOf(重定向URI)!=-1){
窗口清除间隔(轮询计时器);
//获取包含令牌的URL哈希
const hash=win.location.hash;
win.close();
//解析字符串哈希并转换为键和值的对象
const result=hash.substring(1)
.split(“&”)
.map(i=>i.split('='))
.减少((上一个,当前)=>({
…上一页,
[当前值[0]]:当前值[1],
}), {});
//计算令牌何时过期并存储在结果对象中
result.expires_at=Date.now()+parseInt(hash.expires_in,10);
//TODO:将结果保存在sessionStorage中
}
}捕捉(错误){
//如果登录后窗口仍然未重定向,请执行某些操作或不执行任何操作
}
}, 100);

}
谢谢@tayden。难道你不能分享一些代码吗?我真的很想看到一个全面的例子。到目前为止,我所看到的每一个例子或样板都在这方面走捷径。看起来很接近,但如果有一个完整的、完全有效的解决方案就好了。