Merge branch 'feature/failed-login-error' into 'develop'

Visual feedback on failed login

See merge request !49
This commit is contained in:
Shpuld Shpuldson 2017-03-08 19:21:36 -05:00
commit ba4f7ef3ef
3 changed files with 63 additions and 32 deletions

View file

@ -1,13 +1,21 @@
const LoginForm = { const LoginForm = {
data: () => ({ data: () => ({
user: {} user: {},
authError: false
}), }),
computed: { computed: {
loggingIn () { return this.$store.state.users.loggingIn } loggingIn () { return this.$store.state.users.loggingIn }
}, },
methods: { methods: {
submit () { submit () {
this.$store.dispatch('loginUser', this.user) this.$store.dispatch('loginUser', this.user).then(
() => { this.$router.push('/main/friends')},
(error) => {
this.authError = error
this.user.username = ''
this.user.password = ''
}
)
} }
} }
} }

View file

@ -17,6 +17,9 @@
<div class='form-group'> <div class='form-group'>
<button :disabled="loggingIn" type='submit' class='btn btn-default base05 base01-background'>Submit</button> <button :disabled="loggingIn" type='submit' class='btn btn-default base05 base01-background'>Submit</button>
</div> </div>
<div v-if="authError" class='form-group'>
<div class='error base05'>{{authError}}</div>
</div>
</form> </form>
</div> </div>
</div> </div>
@ -39,6 +42,14 @@
margin-top: 1.0em; margin-top: 1.0em;
min-height: 28px; min-height: 28px;
} }
.error {
border-radius: 5px;
text-align: center;
background-color: rgba(255, 48, 16, 0.65);
min-height: 28px;
line-height: 28px;
}
} }
</style> </style>

View file

@ -67,40 +67,52 @@ const users = {
}) })
}, },
loginUser (store, userCredentials) { loginUser (store, userCredentials) {
const commit = store.commit return new Promise((resolve, reject) => {
commit('beginLogin') const commit = store.commit
store.rootState.api.backendInteractor.verifyCredentials(userCredentials) commit('beginLogin')
.then((response) => { store.rootState.api.backendInteractor.verifyCredentials(userCredentials)
if (response.ok) { .then((response) => {
response.json() if (response.ok) {
.then((user) => { response.json()
user.credentials = userCredentials .then((user) => {
commit('setCurrentUser', user) user.credentials = userCredentials
commit('addNewUsers', [user]) commit('setCurrentUser', user)
commit('addNewUsers', [user])
// Set our new backend interactor // Set our new backend interactor
commit('setBackendInteractor', backendInteractorService(userCredentials)) commit('setBackendInteractor', backendInteractorService(userCredentials))
// Start getting fresh tweets. // Start getting fresh tweets.
store.dispatch('startFetching', 'friends') store.dispatch('startFetching', 'friends')
// Get user mutes and follower info // Get user mutes and follower info
store.rootState.api.backendInteractor.fetchMutes().then((mutedUsers) => { store.rootState.api.backendInteractor.fetchMutes().then((mutedUsers) => {
each(mutedUsers, (user) => { user.muted = true }) each(mutedUsers, (user) => { user.muted = true })
store.commit('addNewUsers', mutedUsers) store.commit('addNewUsers', mutedUsers)
})
// Fetch our friends
store.rootState.api.backendInteractor.fetchFriends()
.then((friends) => commit('addNewUsers', friends))
}) })
} else {
// Fetch our friends // Authentication failed
store.rootState.api.backendInteractor.fetchFriends() commit('endLogin')
.then((friends) => commit('addNewUsers', friends)) if (response.status === 401) {
}) reject('Wrong username or password')
} } else {
commit('endLogin') reject('An error occurred, please try again')
}) }
.catch((error) => { }
console.log(error) commit('endLogin')
commit('endLogin') resolve()
}) })
.catch((error) => {
console.log(error)
commit('endLogin')
reject('Failed to connect to server, try again')
})
})
} }
} }
} }