У меня есть материальное угловое приложение. Первая страница - это страница входа, которая при успешном входе заменяется домашней страницей. В случае сафари я вижу, что пароль для имени пользователя добавляется к URL-адресу после входа в систему. Я не жду этого и в хроме этого не происходит.
Страница входа выглядит так:
<form (ngSubmit) = "doLogin()">
<div><input matInput placeholder = " User ID" name = "userId" [(ngModel)] = "userId" ></div>
<div><input matInput type = "password" name = "password" placeholder = " Password" [(ngModel)] = "password"></div>
<div><button mat-raised-button (click) = "doLogin()">Sign In</button></div>
</form>
login.ts
userId:string
password:string
doLogin(){
this.errorMessage = ''
if (this.userId == undefined || this.userId == ''){
this.errorMessage = 'Authentication Failed'
return
}
var user:UserModel = this.dataStore.findUser(this.userId.trim().toLowerCase())
if (user == undefined || (user.password != this.password)){
this.errorMessage = 'Authentication Failed'
return
}
this.core.currentUser = user.userId
this.router.navigate(['homepage'])
}
app.routing.ts
const appRoutes: Routes = [
{
path: '',
component: LoginPageComponent
},
{
path: 'homepage',
component: DynamicHomeComponent
}
];
export const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);
При входе в систему URL-адрес становится ниже в случае сафари: https: // myurl / домашняя страница? userid = xxx & password = yyy
правильно, было бы глупо передавать user и pwd в качестве параметров url. Я не делаю этого по крайней мере намеренно. а в хроме этого не происходит. я только что добавил свой полный код входа, который у меня есть
используйте этот html вместо этого скажите мне, если это все еще происходит <div> <div><input matInput placeholder = " User ID" name = "userId" [(ngModel)] = "userId"></div> <div><input matInput type = "password" name = "password" placeholder = " Password" [(ngModel)] = "password"></div> <div><button mat-raised-button (click) = "doLogin()">Sign In</button></div> </div>
похоже, что тег формы вызывает эту проблему. удаление работает нормально. не уверен, почему





Проблема в том, что у вас есть тег <form>, который неправильно реализует <form>. Если вы хотите использовать тег формы, используйте синтаксис <button type = "submit"></button> на кнопке отправки. Здесь у вас есть кнопка с методом (click) И у вас есть метод submit в теге формы. Отправка по умолчанию, которая представляет собой запрос на получение с параметрами URL, соответствующими формам, запускается inputs, поскольку ваша кнопка не имеет type = "submit" и имеет событие щелчка.
tl; dr => Используйте соглашения HTML-формы или просто используйте событие щелчка, но не то и другое вместе.
Какова ваша функция doLogin? Это просто заполнитель? Вы отправляете имя пользователя и пароль в качестве параметров URL, если да, это неправильно ...