Saya memiliki tindakan kerja yang menyimpan token JWT dengan panggilan sederhana "saveJwt(data)".
Inilah aksinya:
export const requestLoginToken = (username, password) =>
(dispatch, getState) => {
dispatch({type: REQUEST_LOGIN_TOKEN, payload: username})
const payload = {
userName: username,
password: password,
}
const task = fetch('/api/jwt', {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
})
.then(handleErrors)
.then(response => response.json())
.then(data => {
dispatch({type: RECEIVE_LOGIN_TOKEN, payload: data})
saveJwt(data)
})
.catch(error => {
clearJwt()
dispatch({type: ERROR_LOGIN_TOKEN, payload: error.message})
})
addTask(task)
return task
}
Saya kemudian menambahkan tepat di bawah "saveJwt(data)" Blok kode ini:
if (!confirmSelectDataExistance()) {
dispatch({ type: REQUEST_SELECT_DATA })
const token = getJwt()
const headers = new Headers({
'Authorization': `Bearer ${token}`
})
const retrieveSelectData = fetch('/api/SelectData/SelectData', {
method: 'GET',
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
})
.then(handleErrors)
.then(response => response.json())
.then(selectData => {
dispatch({ type: RECEIVE_SELECT_DATA, payload: selectData })
saveSelectData(selectData)
})
}
Yang harus dilakukan hanyalah memeriksa apakah item ada di penyimpanan lokal dan jika demikian, lakukan pengambilan lagi kali ini dengan JWT ditambahkan.
Berikut adalah tindakan yang telah selesai sehingga Anda dapat melihat posisinya:
export const requestLoginToken = (username, password) =>
(dispatch, getState) => {
dispatch({ type: REQUEST_LOGIN_TOKEN, payload: username })
const payload = {
userName: username,
password: password,
}
const task = fetch('/api/jwt', {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
})
.then(handleErrors)
.then(response => response.json())
.then(data => {
dispatch({ type: RECEIVE_LOGIN_TOKEN, payload: data })
saveJwt(data)
//selectData download if nothing is local storage.
if (!confirmSelectDataExistance()) {
dispatch({ type: REQUEST_SELECT_DATA })
const token = getJwt()
const headers = new Headers({
'Authorization': `Bearer ${token}`
})
const retrieveSelectData = fetch('/api/SelectData/SelectData', {
method: 'GET',
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
})
.then(handleErrors)
.then(response => response.json())
.then(selectData => {
dispatch({ type: RECEIVE_SELECT_DATA, payload: selectData })
saveSelectData(selectData)
})
}
})
.catch(error => {
clearJwt()
dispatch({ type: ERROR_LOGIN_TOKEN, payload: error.message })
})
addTask(task)
return task
}
Jadi sekarang pengambilan pertama saya berakhir dengan janji yang tidak ditentukan dan langsung turun ke bawah dengan nilai tugas yang tidak ditentukan,,
Percayakah Anda kemarin itu berfungsi dengan sempurna dan ketika saya mencobanya hari ini gagal.
Mengapa blok kode itu menyebabkan semuanya gagal.. Saya mengomentarinya dan berfungsi dengan baik..
Saya curiga ini ada hubungannya dengan dua janji dll tetapi harus ada cara yang benar untuk mengelola ini.. Saya akan berpikir bahwa jika itu akan menyimpan token JWT itu akan menunjukkan selesai dengan unduhan pertama namun ada sesuatu yang lain salah... dalam blok kode itu atau lebih mungkin cara penggunaannya.