Лучший ответ - лучший! Тем не менее, это не вызвало событий мыши для меня в Firefox, когда etype = 'click'
.
Итак, я изменил document.createEvent
на 'MouseEvents'
и это устранило проблему. Дополнительный код предназначен для проверки того, вмешивался ли какой-либо бит кода в событие, и если он был отменен, я бы зарегистрировал его для консоли.
function eventFire(el, etype){
if (el.fireEvent) {
el.fireEvent('on' + etype);
} else {
var evObj = document.createEvent('MouseEvents');
evObj.initEvent(etype, true, false);
var canceled = !el.dispatchEvent(evObj);
if (canceled) {
// A handler called preventDefault.
console.log("automatic click canceled");
} else {
// None of the handlers called preventDefault.
}
}
}
Во-первых, важно отметить, что сбор имени пользователя и пароля для пользователя Azure AD как части вашего приложения (функция Azure или веб-приложение, любое другое разрабатываемое вами приложение) в значительной степени противоречит передовым методам и открывает множество атак. риски. Поэтому, даже несмотря на то, что вы можете использовать обходные пути для его достижения, пожалуйста, пересмотрите требование, которое вы предъявляете с точки зрения безопасности.
Обходной путь - ROPC - Предоставление учетных данных пароля владельца ресурса (не рекомендуется, несколько проблем)
Azure AD не предоставляет прямой API для проверки учетных данных пользователя. В качестве обходного пути (и при этом плохого) вы можете использовать поток «Учетные данные пароля владельца ресурса» (ROPC) , который работает с именем пользователя и паролем для получения токена.
Это нарушает лучшие практики безопасности, а также не работает с пользователями MFA и федеративной аутентификации . Использование этого гранта крайне нежелательно, так как это создает потенциальные риски атаки, поэтому не рекомендуется.
Если имя пользователя или пароль неверны, вы получите исключение, в противном случае вы получите верный токен, который означает, что учетные данные хороши.
Вот несколько ссылок, которые охватывают детали ROPC (и рекомендуют не использовать его одновременно ..):
Например, код будет выглядеть так для собственного приложения. [1113 ]
result = await context.AcquireTokenAsync(resource, clientId, new UserPasswordCredential("john@contoso.com", johnsPassword));
Другие ссылки