我曾尝试在Okta论坛上发帖,但那里没有运气,所以我将在这里尝试。
我正在使用here
中的Okta登录小部件示例此页面上的代码示例似乎已经过时,并且适用于<3.0。原因是我发现this post描述了此问题以及用于3.0+的正确语法
从<3.0
开始的3.0或更高版本的替换语法oktaSignIn.token.hasTokensInUrl
–>
oktaSignIn.hasTokensInUrl
oktaSignIn.token.parseTokensFromUrl
–>
oktaSignIn.authClient.token.parseFromUrl
oktaSignIn.session.get(function (res) {...
–>
oktaSignIn.authClient.session.get().then(function (res) {...
一旦我替换了语法,登录屏幕就会出现,并且我能够登录并通过id_token
成功登录并返回我的应用程序。
问题在于,oktaSignIn.authClient.token.parseFromUrl(
似乎无法解析URL并因此中断。
控制台
Uncaught TypeError: e.indexOf is not a function
at b (token.js:654)
at Object.parseFromUrl (util.js:70)
如果我返回原始日志页面,它将知道我已经登录并且可以正常工作,并且知道我已经回来了,并且会收到“欢迎回来,我@ example.com”。这个问题是在首次成功登录时会中断。
var oktaSignIn = new OktaSignIn({
logo: 'https://www.example.com/images/1.jpg',
baseUrl: "https://dev-******.okta.com",
clientId: "*******************",
authParams: {
issuer: "https://dev-******.okta.com/oauth2/default",
responseType: ['token', 'id_token'],
display: 'page'
}
});
if (oktaSignIn.hasTokensInUrl()) {
oktaSignIn.authClient.token.parseFromUrl( <---- it breaks here after first successful login
function success(tokens) {
// Save the tokens for later use, e.g. if the page gets refreshed:
// Add the token to tokenManager to automatically renew the token when needed
tokens.forEach(token => {
if (token.idToken) {
signIn.tokenManager.add('idToken', token);
}
if (token.accessToken) {
signIn.tokenManager.add('accessToken', token);
}
});
// Say hello to the person who just signed in:
var idToken = signIn.tokenManager.get('idToken');
console.log('Hello, ' + idToken.claims.email);
// Remove the tokens from the window location hash
window.location.hash='';
},
function error(err) {
// handle errors as needed
console.error(err);
}
);
} else {
oktaSignIn.authClient.session.get().then(function (res) {
// Session exists, show logged in state.
if (res.status === 'ACTIVE') {
console.log('Welcome back, ' + res.login);
return;
}
// No session, show the login form
oktaSignIn.renderEl(
{ el: '#okta-login-container' },
function success(res) {
// Nothing to do in this case, the widget will automatically redirect
// the user to Okta for authentication, then back to this page if successful
},
function error(err) {
// handle errors as needed
console.error(err);
}
);
});
}
有什么想法吗?