react.jsでSPAをコーディングしています。私はredux-apiを使用してバックエンド接続を処理しています。メインアクションを実行する前に認証トークンをリフレッシュするための同期アクションを実行する必要があります。この方法で、私がバックエンドにアクションを実行するたびに、トークンが有効であることを確認します。プリフェッチブロック内のredux-api同期アクション
const endpoints = {
{
url: '/some/url',
crud:true,
prefetch:[
({actions, dispatch, getState}, cb) =>{
actions.auth_token.post(JSON.stringify({
token: "my token",
refreshToken: "my_refresh_token"
}),null, (err, data) =>{
if(err){
// HANDLE ERROR
}
setToken(data)
})
}
]
}
}
const api = reduxApi(endpoints)
どのようにしてプリフェッチ機能を同期方式で呼び出すことができますか?最初にトークンがリフレッシュされ、次にアクションが実行されますか?私たちは、スタッフ非同期を行うことができます
EDIT が、重要なのは、ここでCBへの最終呼び出し()、一例である
const endpoints = {
{
url: '/some/url',
crud:true,
prefetch:[
({actions, dispatch, getState}, cb) =>{
let mills = new Date().getTime()
const { token, generationTime, accessTokenLife, refreshTokenLife, refreshToken } = localStorage
// Conditions: exixts token, it is expired, refresh token is not expired
if(token && generationTime + accessTokenLife - 500 < mills && generationTime + refreshTokenLife - 500 > mills){
dispatch(actions.token_refresh.get(null, null, (err, data) =>{
if(err){
dispatch(setError(err))
}else{
refreshTokenData(data)
}
cb()
}))
}else{
cb()
}
}
]}}
const api = reduxApi(endpoints)
こんにちは!答えをありがとう。 この例では、問題を指摘するためにSSCCEを作成したいと思います。開発環境でトークンを取得し、有効期限が切れる前にリフレッシュします。いずれにせよ、私は解決策を見つけました:私は非同期操作を使用することができ、成功またはエラーの場合は、cb()関数を呼び出さなければなりません。それでおしまい! –