Auth0 isAuthenticated()始终为false

bxfogqkk  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(213)

我使用Extjs,并使用this tutorial设置应用程序和auth0。下面是登录代码:

userLogin: function() {     
    //Create auth0 client
    createAuth0Client({
      domain: ".....auth0.com",
      client_id: ".....",
      useRefreshTokens: true
    }).then(function(auth0) {
        try {
            //Check if the user is authenticated, if not authenticate him, if yes insert his token in every ajax request
            auth0.isAuthenticated().then(function(authenticated) {
                if(!authenticated)
                {                      
                    auth0.loginWithRedirect({ redirect_uri: window.location.origin }).then();
                }
                else{
                    auth0.getTokenSilently().then(function(token) {
                        Ext.Ajax.setDefaultHeaders({ 'Authorization' : 'Bearer ' + token });
                    });
                }
            })
        } catch (err) {
            console.log("Log in failed", err);
        }
    });
}

在第一次尝试时,isAuthenticated为false(正常行为),因此用户被重定向到auth0登录提示,用户输入其凭据并登录,auth0重定向到应用程序,现在isAutheenticated仍然为false,用户被重定向至auth0但没有登录提示,因为他已经登录,重定向回应用程序,然后开始无限循环。。。
auth0中的应用程序设置为SPA(单页应用程序)。尝试更改缓存位置,但未更改任何内容。
有什么想法吗?

wkftcu5l

wkftcu5l1#

我想出来了。您需要使用auth0.handleRedirectCallback()函数:

try {
    auth0.isAuthenticated().then(async function (authenticated) {
        if (!authenticated) {
            const query = window.location.search;
            const shouldParseResult = query.includes("code=") && query.includes("state=");
            if (shouldParseResult) {
                console.log("> Parsing redirect");
                try {
                    const result = await auth0.handleRedirectCallback();
                    console.log("Logged in!");
                } catch (err) {
                    console.log("Error parsing redirect:", err);
                }
                window.history.replaceState({}, document.title, "/");
            } else {
                auth0.loginWithRedirect({ redirect_uri: window.location.origin });
            }
        } else {
            auth0.getTokenSilently().then(function (token) {
                Ext.Ajax.setDefaultHeaders({ 'Authorization': 'Bearer ' + token });
            });
        }
    })
} catch (err) {
    console.log("Log in failed", err);
}

或者,您可以使用1d1d1e:

if(!authenticated) {                      
    auth0.loginWithPopup().then(token => {
        auth0.getUser().then(user => {
            console.log(user);
        });
    })
 }

相关问题