-
-
Save fjeldstad/6e77813d730ebf4ebe7c to your computer and use it in GitHub Desktop.
var authContext = new AuthenticationContext({ | |
// ... | |
}); | |
// Our custom asynchronous login function. Uses authContext.config.displayCall | |
// to show the Azure AD login page in a popup window, then periodically checks | |
// the popup window for the resulting hash + uses adal.js to handle it. | |
// For this to work, we need a dummy landing page to use as redirectUri. | |
// This can be an empty HTML page, but needs to have the same origin as the | |
// main window. | |
var dummyAuthPage = 'auth.html'; | |
var getUser = function () { | |
return new Promise(function (resolve, reject) { | |
// If the user is cached, resolve the promise immediately. | |
var user = authContext.getCachedUser(); | |
if (user) { | |
resolve(user); | |
return; | |
} | |
// The user was not cached. Open a popup window which | |
// performs the OAuth login process, then signals | |
// the result. | |
authContext.config.displayCall = function (url) { | |
authContext.config.displayCall = null; | |
var popup = window.open(url, 'auth-popup', 'width=800,height=500'); | |
var intervalId = window.setInterval(function () { | |
try { | |
if (popup.location.pathname.indexOf('/' + dummyAuthPage) >= 0) { | |
window.clearInterval(intervalId); | |
authContext.handleWindowCallback(popup.location.hash); | |
popup.close(); | |
var user = authContext.getCachedUser(); | |
if (user) { | |
resolve(user); | |
} else { | |
reject(authContext.getLoginError()); | |
} | |
} | |
} catch (whatever) { | |
if (popup.closed) { | |
reject(); | |
} | |
} | |
}, 100); | |
}; | |
authContext.config.redirectUri = window.location.href.replace('index.html', '') + dummyAuthPage; | |
authContext.login(); | |
}); | |
}; | |
// Now use getUser() whenever a user token is needed. |
Is this solution working in IE?
This perfectly works fine in Chrome however in IE 'popup.location.pathname' check is always errors out as popup.location is undefined.
Worked fine in Chrome but in IE 11 it is always giving Error ("undefined") on this line:
#29 if (popup.location.pathname.indexOf('/' + dummyAuthPage) >= 0) {
Also, in IE 11 it is giving another error "Access denied" for the url which i am using as "redirect url" . any solution to this?
anything which says " Promise " is giving error "undefined". e.g. Promise, reject(), resolve() are giving same error.
do i need to include some external java-script library ? can u provide WORKING SAMPLE please ?
i tried the above code on the login page but a popup window is not being displayed
` function Login() {
var dummyAuthPage = 'Login.html';
var getUser = function () {
return new Promise(function (resolve, reject) {
// If the user is cached, resolve the promise immediately.
var user = authContext.getCachedUser();
if (user) {
resolve(user);
return;
}
authContext.config.displayCall = function (url) {
authContext.config.displayCall = null;
var popup = window.open(url, 'auth-popup', 'width=800,height=500');
var intervalId = window.setInterval(function () {
try {
if (popup.location.pathname.indexOf('/' + dummyAuthPage) >= 0) {
window.clearInterval(intervalId);
authContext.handleWindowCallback(popup.location.hash);
popup.close();
var user = authContext.getCachedUser();
if (user) {
resolve(user);
} else {
reject(authContext.getLoginError());
}
}
} catch (whatever) {
if (popup.closed) {
reject();
}
}
}, 100);
};
authContext.config.redirectUri = window.location.href.replace('home.html', '') + dummyAuthPage;
authContext.login();
});
};
}`
Hi There! This saved me! Thanks!
One note maybe, not sure which version of adal.js you are using but handleWindowCallback does not accept the hash in the latest version.
However I modified my version of adal.js and that seem to work fine.