Reactjs 试图从oidc客户端回调检索状态对象时未定义的对象
对用户进行身份验证并重定向回我的Reactjs 试图从oidc客户端回调检索状态对象时未定义的对象,reactjs,react-hooks,openid-connect,Reactjs,React Hooks,Openid Connect,对用户进行身份验证并重定向回我的主页组件后,我正试图从signInDirectCallback函数中检索用户配置文件,如下所示: usermanager.signinRedirectCallback().then(function (data) { console.log(data) setUser(data) }).catch(function (e) { console.error(e) }); 记录用户(数据)显示正确的对象
主页
组件后,我正试图从signInDirectCallback
函数中检索用户配置文件,如下所示:
usermanager.signinRedirectCallback().then(function (data) {
console.log(data)
setUser(data)
}).catch(function (e) {
console.error(e)
});
记录用户(数据)显示正确的对象。但是,使用setUser(data)
然后在我的返回中尝试检索它会给我未定义的read属性
以下是功能代码:
function Home() {
const usermanager = new Oidc.UserManager(authConfig)
const [user, setUser] = useState(localStorage.getItem("user") || {})
React.useEffect(() => {
localStorage.setItem("user", user);
}, [user])
usermanager.signinRedirectCallback().then(function (data) {
console.log(data)
setUser(data)
}).catch(function (e) {
console.error(e)
});
return (
<div>
<h3>Home component</h3>
<p>{user.profile.unique_name}</p>
{console.log(user)}
</div>
)
}
函数Home(){
const usermanager=new Oidc.usermanager(authConfig)
const[user,setUser]=useState(localStorage.getItem(“用户”)| |{})
React.useffect(()=>{
setItem(“用户”,user);
},[用户])
usermanager.SignInDirectCallback().then(函数(数据){
console.log(数据)
设置用户(数据)
}).catch(函数(e){
控制台错误(e)
});
返回(
主分量
{user.profile.unique_name}
{console.log(用户)}
)
}
我希望能够将用户存储在一种状态,以便以后在应用程序中使用
这是成品和工作代码:
function Home() {
const usermanager = new Oidc.UserManager(authConfig)
const [user, setUser] = useState(JSON.parse(localStorage.getItem("user")) || {})
React.useEffect(() => {
localStorage.setItem("user", JSON.stringify(user));
}, [user])
usermanager.signinRedirectCallback().then(function (data) {
setUser(data)
}).catch(function (e) {
console.error(e)
});
return (
<UserContext.Provider value={user.profile}>
<div>
<ComponenentThatUsesUserContext />
</div>
</UserContext.Provider>
)
}
函数Home(){
const usermanager=new Oidc.usermanager(authConfig)
const[user,setUser]=useState(JSON.parse(localStorage.getItem(“用户”))|{})
React.useffect(()=>{
setItem(“user”,JSON.stringify(user));
},[用户])
usermanager.SignInDirectCallback().then(函数(数据){
设置用户(数据)
}).catch(函数(e){
控制台错误(e)
});
返回(
)
}
在存储用户数据之前,您需要对其进行字符串化:
localStorage.setItem("user", JSON.stringify(user));
并将其解析回您的对象:
JSON.parse(localStorage.getItem("user"))
为什么页面重新加载后会有任何数据?这一切都将是默认的。您可以在Cookie、localstorage、redirect link…@RTW中的重定向之间存储数据,但这不是我在useffect和localstorage
调用中所做的吗?这解决了问题。谢谢