当我尝试尝试auth0的auth0时,我是parseHash的新手。令我惊讶的是,该函数以某种方式返回null。我试图窥视source code内部,看来此函数最终尝试返回某些内容。
这是令我困惑的代码部分:
import React from 'react';
import { Link } from '@reach/router';
import './Callback.sass';
export const Callback = ({ auth, navigate }) => {
let result = auth.parseHash((err, authResult) => {
if (err) {
return (
<div className="error">
<h1>{err.error}</h1>
<p>{err.errorDescription}</p>
<Link to="/">Home</Link>
</div>
);
} else {
console.log({ authResult });
return 'profile';
// localStorage.setItem('authResult', JSON.stringify(authResult));
// navigate('/profile');
}
});
console.log({ result });
if (result) return result;
return <React.Fragment />;
};
我认为这确实令人困惑。控制台记录了“ authResult”部分,但是result
是undefined
。 (我什至对异步等待进行了测试,仍然无法达到我的期望。)
我目前只是将结果包装起来以解决此问题。
这是一个错误吗?还是我使用的方法不正确?
答案 0 :(得分:1)
我也是auth0的新手,今天也遇到了相同的错误。
通过将parseHash
包装在Promise中来解决此问题:
/* ... */
function handleAuthentication() {
// wrap parseHash in a Promise
return new Promise((resolve, reject) => {
auth0.parseHash((err, authResult) => {
if (authResult && authResult.accessToken && authResult.idToken) {
resolve(authResult)
} else if (err) {
throw new Error(`Error: ${err.error}. Check the console for further details.`);
} else {
throw new Error(`Unknown error`);
}
})
})
}
// wait for the Promise to resolve and log the result
handleAuthentication()
.then(function(result) {
console.log(result);
});
您的代码中的问题是,您希望parseHash
直接返回结果,但不会返回结果(第22行)。而是调用回调函数,该回调函数您已正确注册,因此可以在回调函数内而不是在回调函数外获得预期的结果。
答案 1 :(得分:1)
您的console.log({ result });
在
之前运行 let result = auth.parseHash((err, authResult) => {
因此将其包装在Promise中可以提供帮助。
答案 2 :(得分:0)
代码没有错...实际上,在当前示例中,您应该始终安慰auth.parseHash$()
,而实际上并没有得到什么,实际上,Observable<any>
是一个返回auth.parseHash$()
的回调。
其目的是解析url哈希并提取Auth响应,返回您传入的一些自定义参数(精确来说是哈希段)。
因此,如果您不希望返回在请求授权时传递的一些哈希参数,df = pandas.DataFrame({"data": [1, 2, 3], "type": ["good - multiple", "bad - multiple", "good - single"]})
#this will fail as df.type doesn't have a startswith method
good_df = df[df.type.startswith("good")]
将不返回任何内容-链接here