PLT-3020 Re-added errors to login page when no username/password is added (#3215)
* Re-added errors to login page when no username/password is added * Added code to help login page state keep in sync with the browser's state after using autocomplete
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
7b99ac0a91
Коммит
87f357a54d
@@ -52,8 +52,47 @@ export default class LoginController extends React.Component {
|
|||||||
preSubmit(e) {
|
preSubmit(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
const loginId = this.state.loginId.trim();
|
// password managers don't always call onInput handlers for form fields so it's possible
|
||||||
const password = this.state.password;
|
// for the state to get out of sync with what the user sees in the browser
|
||||||
|
let loginId = this.refs.loginId.value;
|
||||||
|
if (loginId !== this.state.loginId) {
|
||||||
|
this.setState({loginId});
|
||||||
|
}
|
||||||
|
|
||||||
|
let password = this.refs.password.value;
|
||||||
|
if (password !== this.state.password) {
|
||||||
|
this.setState({password});
|
||||||
|
}
|
||||||
|
|
||||||
|
loginId = loginId.trim();
|
||||||
|
password = password.trim();
|
||||||
|
|
||||||
|
if (!loginId) {
|
||||||
|
this.setState({
|
||||||
|
serverError: (
|
||||||
|
<FormattedMessage
|
||||||
|
id='login.noLoginId'
|
||||||
|
defaultMessage='Please enter your {loginId}'
|
||||||
|
values={{
|
||||||
|
loginId: this.createLoginPlaceholder()
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!password) {
|
||||||
|
this.setState({
|
||||||
|
serverError: (
|
||||||
|
<FormattedMessage
|
||||||
|
id='login.noPassword'
|
||||||
|
defaultMessage='Please enter your password'
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (global.window.mm_config.EnableMultifactorAuthentication === 'true') {
|
if (global.window.mm_config.EnableMultifactorAuthentication === 'true') {
|
||||||
Client.checkMfa(
|
Client.checkMfa(
|
||||||
@@ -155,7 +194,11 @@ export default class LoginController extends React.Component {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
createLoginPlaceholder(emailSigninEnabled, usernameSigninEnabled, ldapEnabled) {
|
createLoginPlaceholder() {
|
||||||
|
const ldapEnabled = global.window.mm_config.EnableLdap === 'true';
|
||||||
|
const usernameSigninEnabled = global.window.mm_config.EnableSignInWithUsername === 'true';
|
||||||
|
const emailSigninEnabled = global.window.mm_config.EnableSignInWithEmail === 'true';
|
||||||
|
|
||||||
const loginPlaceholders = [];
|
const loginPlaceholders = [];
|
||||||
if (emailSigninEnabled) {
|
if (emailSigninEnabled) {
|
||||||
loginPlaceholders.push(Utils.localizeMessage('login.email', 'Email'));
|
loginPlaceholders.push(Utils.localizeMessage('login.email', 'Email'));
|
||||||
@@ -255,10 +298,11 @@ export default class LoginController extends React.Component {
|
|||||||
<div className={'form-group' + errorClass}>
|
<div className={'form-group' + errorClass}>
|
||||||
<input
|
<input
|
||||||
className='form-control'
|
className='form-control'
|
||||||
|
ref='loginId'
|
||||||
name='loginId'
|
name='loginId'
|
||||||
value={this.state.loginId}
|
value={this.state.loginId}
|
||||||
onChange={this.handleLoginIdChange}
|
onChange={this.handleLoginIdChange}
|
||||||
placeholder={this.createLoginPlaceholder(emailSigninEnabled, usernameSigninEnabled, ldapEnabled)}
|
placeholder={this.createLoginPlaceholder()}
|
||||||
spellCheck='false'
|
spellCheck='false'
|
||||||
autoCapitalize='off'
|
autoCapitalize='off'
|
||||||
/>
|
/>
|
||||||
@@ -267,6 +311,7 @@ export default class LoginController extends React.Component {
|
|||||||
<input
|
<input
|
||||||
type='password'
|
type='password'
|
||||||
className='form-control'
|
className='form-control'
|
||||||
|
ref='password'
|
||||||
name='password'
|
name='password'
|
||||||
value={this.state.password}
|
value={this.state.password}
|
||||||
onChange={this.handlePasswordChange}
|
onChange={this.handlePasswordChange}
|
||||||
@@ -278,7 +323,6 @@ export default class LoginController extends React.Component {
|
|||||||
<button
|
<button
|
||||||
type='submit'
|
type='submit'
|
||||||
className='btn btn-primary'
|
className='btn btn-primary'
|
||||||
disabled={!this.state.loginId || !this.state.password}
|
|
||||||
>
|
>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id='login.signIn'
|
id='login.signIn'
|
||||||
|
|||||||
@@ -956,6 +956,8 @@
|
|||||||
"login.invalidPassword": "Your password is incorrect.",
|
"login.invalidPassword": "Your password is incorrect.",
|
||||||
"login.ldapUsername": "LDAP Username",
|
"login.ldapUsername": "LDAP Username",
|
||||||
"login.noAccount": "Don't have an account? ",
|
"login.noAccount": "Don't have an account? ",
|
||||||
|
"login.noLoginId": "Please enter your {loginId}",
|
||||||
|
"login.noPassword": "Please enter your password",
|
||||||
"login.on": "on {siteName}",
|
"login.on": "on {siteName}",
|
||||||
"login.or": "or",
|
"login.or": "or",
|
||||||
"login.password": "Password",
|
"login.password": "Password",
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user