繁体   English   中英

如何根据 Firebase 身份验证状态重定向用户?

[英]How to redirect a user based on Firebase Authentication status?

我想根据用户是新用户还是回访用户在使用 Github 或其他人登录时重定向用户。 我无法访问此答案中引用的 isNewUser 属性: 如何使用 google auth在 firebase 中区分登录和注册用户?

我有一个标准的登录功能:

const signinWithGoogle = () => {
    return auth.signInWithPopup(googleProvider)
    .then((response) => {
        handleUser(response.user)
    })
}

这是 handleUser 函数:

const handleUser = (rawUser) => {
    if (rawUser) {
        const currentUser = formatUser(rawUser)
        createUser(currentUser.uid, currentUser)
        setCurrentUser(currentUser)
        if (currentUser.providerData[0].isNewUser===true) {
            history.push("/onboarding")
        } else {
            history.push("/")
        }
        return currentUser
    }
    else {
        setCurrentUser(false)
        return false
    }
}

这是格式用户:

const formatUser = (user) => {
return {
    uid: user.uid,
    email: user.email,
    name: user.displayName,
    provider: user.providerData[0].providerId,
    avatar: user.photoURL,
}
}

任何人都可以看到我做错了什么吗?

干杯,马特

编辑:

如果我们将响应传递给 HandleUser 函数和控制台日志 response.additionalUserInfo.isNewUser 我们得到“true”。 但是,如果我们在 if 语句中使用它,它似乎由于某种原因被忽略了

const handleUser = (response) => {
    if (response) {
        console.log("response: ", response.additionalUserInfo.isNewUser)
        const currentUser = formatUser(response.user)
        createUser(currentUser.uid, currentUser)
        setCurrentUser(currentUser)
        console.log('response', response)
        console.log('additional info', response.additionalUserInfo)
        const isNew = response.additionalUserInfo.isNewUser
        console.log('isNewUser', isNewUser)
        if (isNew) {
            console.log('redirecting to /onboarding')
            history.push("/onboarding")
        } else {
            console.log('redirecting to /')
            history.push("/")
        }
        return currentUser
    }
    else {
        setCurrentUser(false)
        return false
    }
}

编辑 2:这是控制台日志的输出

在此处输入图片说明

该错误来自模态中的 signInWithGithub 函数

async function signInGitHub() {
    try {
        await signinWithGitHub()
    }

    catch(err) {
        console.log("Error: ",err.code)
    }

    finally {
        closeModal();
    }
}

看起来您将User传递给该函数,而不是原始响应。 isNewUser存在于additionalUserInfo属性上。 请尝试重构,如下所示:

const handleUser = (rawUser) => {
    if (rawUser) {
        const currentUser = formatUser(rawUser.user)
        createUser(currentUser.uid, currentUser)
        setCurrentUser(currentUser)
        if (currentUser.additionalUserInfo.isNewUser) {
            history.push("/onboarding")
        } else {
            history.push("/")
        }
        return currentUser
    }
    else {
        setCurrentUser(false)
        return false
    }
}

还要确保传递原始响应:

handleUser(response.user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM