|
12 | 12 | </div>
|
13 | 13 | <div class="row">
|
14 | 14 | <div class="cd-login__box">
|
15 |
| - <form @submit.prevent="login"> |
16 |
| - <div class="form-group"> |
17 |
| - <label>{{ $t('Email') }}</label> |
18 |
| - <input class="form-control" data-vv-name="email" data-vv-validate-on="blur" type="email" v-model="email" v-validate="'required|email'" novalidate/> |
19 |
| - </div> |
20 |
| - <p class="cd-login__email-req-err text-danger" v-show="errors.has('email:required')">{{ $t('Email is required') }}</p> |
21 |
| - < p class= "cd-login__email-format-err text-danger" v-show= "errors.has('email:email')">{{ $t('Email should be in the format: [email protected]') }}</ p> |
22 |
| - <div class="form-group"> |
23 |
| - <label>Password</label> |
24 |
| - <input class="form-control" data-vv-name="password" data-vv-validate-on="blur" type="password" v-model="password" v-validate="'required'" /> |
25 |
| - </div> |
26 |
| - <p class="cd-login__password-req-err text-danger" v-show="errors.has('password:required')">{{ $t('Password is required') }}</p> |
27 |
| - <input class="cd-login__button btn btn-primary" type="submit" value="Login" /> |
28 |
| - </form> |
29 |
| - <p v-show="errors.has('invalid-password')" class="cd-login__login-failed text-danger">{{ $t('There was a problem logging in: {msg}', {msg: $t('Invalid email or password') }) }}</p> |
30 |
| - <p v-show="errors.has('raspberry-linked')" class="cd-login__login-failed text-danger">{{ $t('There was a problem logging in: {msg}', {msg: $t('Account linked to a My Raspberry Pi account.') }) }}<a href='/rpi/login'>{{$t('Click here to login through My Raspberry Pi')}}</a>{{$t('Remember to use the same email address!')}}</p> |
31 |
| - <p v-show="errors.has('raspberry-linked')" class="cd-login__login-raspberry-failed text-danger">{{ $t('There was a problem logging in: {msg}', {msg: $t('Account linked to a My Raspberry Pi account.') }) }}<a href='/rpi/login'>{{$t('Click here to login through My Raspberry Pi')}}</a>{{$t('Remember to use the same email address!')}}</p> |
32 |
| - <p class="cd-login__forgot-password"><a href="/reset">{{ $t('Forgot password?') }}</a></p> |
33 |
| - <p class="cd-login__register">{{ $t("Don't have an account?") }} <a :href="registerUrl">{{ $t('Register here') }}</a></p> |
| 15 | + <span v-show="errors.first('loginFailed') !== 'raspberry-linked'"> |
| 16 | + <form @submit.prevent="login"> |
| 17 | + <div class="form-group"> |
| 18 | + <label>{{ $t('Email') }}</label> |
| 19 | + <input class="form-control" data-vv-name="email" data-vv-validate-on="blur" type="email" v-model="email" v-validate="'required|email'" novalidate/> |
| 20 | + </div> |
| 21 | + <p class="cd-login__email-req-err text-danger" v-show="errors.has('email:required')">{{ $t('Email is required') }}</p> |
| 22 | + < p class= "cd-login__email-format-err text-danger" v-show= "errors.has('email:email')">{{ $t('Email should be in the format: [email protected]') }}</ p> |
| 23 | + <div class="form-group"> |
| 24 | + <label>Password</label> |
| 25 | + <input class="form-control" data-vv-name="password" data-vv-validate-on="blur" type="password" v-model="password" v-validate="'required'" /> |
| 26 | + </div> |
| 27 | + <p class="cd-login__password-req-err text-danger" v-show="errors.has('password:required')">{{ $t('Password is required') }}</p> |
| 28 | + <input class="cd-login__button btn btn-primary" type="submit" value="Login" /> |
| 29 | + </form> |
| 30 | + <p v-show="errors.has('loginFailed')" class="cd-login__login-failed text-danger">{{ $t('There was a problem logging in: {msg}', {msg: $t('Invalid email or password') }) }}</p> |
| 31 | + <p class="cd-login__forgot-password"><a href="/reset">{{ $t('Forgot password?') }}</a></p> |
| 32 | + <p class="cd-login__register">{{ $t("Don't have an account?") }} <a :href="registerUrl">{{ $t('Register here') }}</a></p> |
| 33 | + </span> |
| 34 | + <span v-show="errors.first('loginFailed') === 'raspberry-linked'" class="cd-login__raspberry-linked"> |
| 35 | + <p> |
| 36 | + {{ $t('The account for email {msg} is linked to a My Raspberry Pi account.', { msg: email }) }} |
| 37 | + </p> |
| 38 | + <p> |
| 39 | + <a :href="`/rpi/login?user=${email}`">{{$t('Login through My Raspberry Pi.')}}</a> |
| 40 | + </p> |
| 41 | + <p> |
| 42 | + <a href='#' v-on:click.prevent="resetForm()" >{{$t('Use different Coder Dojo account.')}}</a> |
| 43 | + </p> |
| 44 | + </span> |
34 | 45 | </div>
|
35 | 46 | </div>
|
36 | 47 | </div>
|
|
75 | 86 | async validateForm() {
|
76 | 87 | return this.$validator.validateAll();
|
77 | 88 | },
|
| 89 | + resetForm() { |
| 90 | + this.email = ''; |
| 91 | + this.password = ''; |
| 92 | + if (this.errors && this.errors.clear) { |
| 93 | + this.errors.clear(); |
| 94 | + } |
| 95 | + }, |
78 | 96 | redirectTo(url) {
|
79 | 97 | location.href = url;
|
80 | 98 | },
|
81 | 99 | async login() {
|
82 | 100 | const valid = await this.validateForm();
|
83 | 101 | if (valid) {
|
84 | 102 | const response = await UserService.login(this.email, this.password);
|
| 103 | + if (this.errors && this.errors.clear) { |
| 104 | + this.errors.clear(); |
| 105 | + } |
85 | 106 | if (response.body.ok === false) {
|
86 |
| - this.errors.add({ field: response.body.why }); |
| 107 | + this.errors.add({ |
| 108 | + field: 'loginFailed', |
| 109 | + msg: response.body.why }); |
87 | 110 | } else {
|
88 | 111 | const forumUrl = `^${Vue.config.forumsUrlBase}/auth/CoderDojo$`;
|
89 | 112 | if (this.redirectUrl.match(forumUrl)) {
|
|
123 | 146 | .primary-button;
|
124 | 147 | margin-bottom: 48px;
|
125 | 148 | }
|
| 149 | +
|
| 150 | + &__raspberry-linked { |
| 151 | + display: block; |
| 152 | + } |
126 | 153 | }
|
127 | 154 | </style>
|
0 commit comments