Last active
October 24, 2019 15:57
-
-
Save fjeldstad/6e77813d730ebf4ebe7c to your computer and use it in GitHub Desktop.
Example usage of login popup with adal.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
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();
});
};
}`
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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?