Я пытаюсь добавить компонент ведения журнала в мой проект, но мне нужно войти в систему дважды, чтобы войти в систему. Вот мой код:
login: function () {
var self = this
if (this.valid) {
const { email, password } = this
this.isLoading = true
this.$store.dispatch(AUTH_REQUEST, { email, password }).then(function () {
self.isLoading = false
self.$router.push({name: 'landing'})
}).catch(function () {
self.isLoading = false
self.password = ''
self.passwordErrorMessage = ['Złe hasło']
self.passwordError = true
})
}
}
Функция входа отправляет действие AUTH_REQUEST:
[AUTH_REQUEST]: function ({commit, dispatch}, user) {
return new Promise(function (resolve, reject) {
commit(AUTH_REQUEST)
apiCall('login', user).then(function (response) {
localStorage.setItem('user-token', response.data.token)
Vue.http.defaults.headers.common['Authorization'] = (localStorage.getItem('user-token') !== null ? ('bearer ' + localStorage.getItem('user-token')) : ('bearer ' + localStorage.getItem('user-token')))
commit(AUTH_SUCCESS, response)
dispatch(USER_REQUEST)
resolve(response)
}).catch(async function (error) {
commit(AUTH_ERROR, error)
localStorage.removeItem('user-token')
reject(error)
})
})
},
И мой apiCall:
const apiCall = (variable, args = {}) => new Promise((resolve, reject) => {
if (typeof calls[variable] === 'undefined') return null
var api = calls[variable]
var promise = null
var parsed = parseUrl(api.url, args)
args = parsed.args
// console.log(args)
switch (api.method) {
case 'POST':
promise = Vue.http.post(parsed.url, args)
break
case 'GET':
promise = Vue.http.get(parsed.url + transformData(args))
break
case 'DELETE':
promise = Vue.http.delete(parsed.url + transformData(args))
break
case 'PATCH':
promise = Vue.http.patch(parsed.url, args)
break
}
console.log(parsed.url)
console.log(promise)
promise.then(function (response) {
resolve(response)
}).catch(function (error) {
// console.log(error)
if (error.response.status === 401) {
store.dispatch(AUTH_TIMEOUT)
} else {
reject(error.response)
}
})
})
Дело в том, что с первой попытки я получаю Обещания вот так:
auth/login
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
вторая попытка:
auth/login
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
__proto__
:
Promise
[[PromiseStatus]]
:
"resolved"
[[PromiseValue]]
:
Object
Так что я не получаю прототип в своем обещании, которое, очевидно, необходимо для разрешения моего ответа. Я проверил API с почтальоном, и каждый раз все работает отлично. Я использую Laravel для API. Есть идеи?