はじめに
Vueのコンポーネント内から、DRFで作成したAPIを以下のようにaxiosなどで取得する際にエラーが発生した。
.../source/views/Mypage.vue
export default {
...
...
mounted() {
this.axios.get("/users/" + this.user_id).then(response => {
this.Person = response.data
})
}
};
発生したエラー
Access to XMLHttpRequest at 'http://127.0.0.1:8000/XXX/XXX/XXX' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
VueからのXMLHttpRequestのアクセスがDRF側でブロックされているという感じの内容である。
CORSの設定を確認すると、以下の様にしっかり設定できている。
.../settings.py
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
'http://localhost:8080',
'http://127.0.0.1:8080',
)
解決
リクエスト先のURLで最後に '/' をつけるのを忘れていた。
したがって、Vueのコンポーネントファイルを以下の様に修正すればよい。
.../source/views/Mypage.vue
export default {
...
...
mounted() {
// 最後に'/'を追加する
api.get("/users/" + this.user_id + '/').then(response => {
this.Person = response.data
})
}
};