@weakish 调用 become 方法的完整请求如下:
代码片段:
// 云函数
AV.Cloud.define('verifyEmail', async function (request) {
const { token } = request.params
const result = await fetch(`https://2rl8juv7.lc-cn-n1-shared.com/1.1/verifyEmail/${token}`).then(res => res.json())
if (result.error) {
return result
} else {
const userQuery = new AV.Query('_User')
const user = await userQuery.get(result.objectId, {useMasterKey: true})
return {token: user._sessionToken}
}
});
// 客户端
VerifyPage 是用户从邮件中的按钮跳转过来的自定义验证页面
function VerifyPage () {
const [isLoading, setLoading] = useState(true)
const [error, setError] = useState('')
// token 来自链接中的参数
const [searchParams] = useSearchParams()
const token = searchParams.get('token')
async function verify () {
try {
const result = await AV.Cloud.run('verifyEmail', {token})
if (result.error) {
setError(result.error)
} else {
const user = await AV.User.become(result.token)
console.log('成功!')
}
} catch (err) {
console.dir(err)
}
}
useEffect(() => {
verify()
}, [])
return (
<Flex flex="1" mt="72px" align="center" justify="center">
{
isLoading ?
<Flex>
<Loading/> 正在验证邮箱
</Flex> : (
error &&
<Box>
<Text mb="12px">{ error }</Text>
<Button>重发验证邮件</Button>
</Box>
)
}
</Flex>
)
}