欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

VUE django 跨域、csrf令牌的問題

 更新時(shí)間:2024年09月21日 10:11:34   作者:貪玩的小金魚  
在Vue和Django進(jìn)行前后分離開發(fā)時(shí),經(jīng)常會(huì)遇到跨域和CSRF令牌驗(yàn)證問題,本文詳細(xì)介紹了如何在Django后端設(shè)置視圖獲取CSRF令牌,并在Vue前端進(jìn)行配置以確保安全的數(shù)據(jù)交互,文章提供了后端視圖創(chuàng)建、settings配置以及前端axios請求封裝的具體方法

跨域問題

使用VUE django前后分離,跨域跟django CSRF令牌是個(gè)很頭疼問題,跨域問題解決方法很多,bing一下就有很多這里先略過,主要講一下令牌用法,取消令牌檢測這里有提到django開發(fā)。

django前后分離 CSRF獲取及使用

首先要獲取CSRF令牌,django中GET請求是不會(huì)進(jìn)行CSRF驗(yàn)證的,這里我們可以創(chuàng)建一個(gè)django視圖,前端通過GET請求來獲取,

Django 配置

1、獲取token的視圖

這里我寫了兩個(gè):

  • 第一個(gè)是前端發(fā)送GET請求直接獲取
  • 第二個(gè)是為了服務(wù)端處理登錄請求時(shí)候 通過后將token以及登錄所需的信息一并傳遞給前端

為什么想了兩個(gè),是因?yàn)閼校绻加玫谝环N,后端需要處理一下json數(shù)據(jù),就直接復(fù)制只傳遞token字符串,在封裝成json給前端。

def get_csrf_token(request):
    csrf_token = get_token(request)
    print(csrf_token)
    return JsonResponse({'csrfToken': csrf_token})
    # return csrf_token
def get_csrf_token1(request):
    csrf_token = get_token(request)
    print(csrf_token)
    return csrf_token

2、后端settings配置文件,需要配置以下信息。

CORS_ALLOW_HEADERS = [
    'XMLHttpRequest',
    'X_FILENAME',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'Pragma',
    # 添加其他你需要的請求頭,這里比較多
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',    #放到前邊
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',  #還有這個(gè)
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'sbh_bly_api.middleware.CustomExceptionMiddleware',
    
]
# 配置CSRF的信任域,與跨域配置相同,這個(gè)很重要,我就是因?yàn)檫@個(gè)卡了一天
CSRF_TRUSTED_ORIGINS = [
    'http://127.0.0.1:8080',  # 確保與前端地址匹配
]

3、VUE前端配置

注意我的VUE項(xiàng)目用的ts,如果用js的請自行轉(zhuǎn)換一下。

1) axios封裝,這里對axios請求做了封裝 http.ts文件,這里的代碼,是將token存儲(chǔ)到了 store中,這里是取值“const token = store.state.token” 根據(jù)實(shí)際項(xiàng)目,和習(xí)慣來確定存儲(chǔ)位置。

// http.ts

import axios, { AxiosInstance,  AxiosRequestConfig,  AxiosResponse } from 'axios';
import store from '@/store';

// 創(chuàng)建 Axios 實(shí)例
const instance: AxiosInstance = axios.create({
  baseURL: 'http://127.0.0.1:8000',
  headers: {
    'Content-Type': 'application/json'
  },
});

// 請求攔截器
import axios, { AxiosInstance,  AxiosRequestConfig,  AxiosResponse } from 'axios';
import store from '@/store';

// 創(chuàng)建 Axios 實(shí)例
const instance  = axios.create({
  baseURL: 'http://127.0.0.1:8000',
  timeout: 3000,
  headers: {
    'Content-Type': 'application/json'
  },
});

// 請求相關(guān)處理 請求攔截 在請求攔截中可以補(bǔ)充請求相關(guān)的配置
// interceptors axios的攔截器對象
instance.interceptors.request.use(config => {
  // config 請求的所有信息
 // console.log(config);
 const token  = localStorage.token
 config.headers['X-CSRFToken'] = token
 return config // 將配置完成的config對象返回出去 如果不返回 請求講不會(huì)進(jìn)行
}, err => {
 // 請求發(fā)生錯(cuò)誤時(shí)的相關(guān)處理 拋出錯(cuò)誤
Promise.reject(err)
})

instance.interceptors.response.use(res => {
  // 我們一般在這里處理,請求成功后的錯(cuò)誤狀態(tài)碼 例如狀態(tài)碼是500,404,403
  // res 是所有相應(yīng)的信息
  console.log(res)
 return Promise.resolve(res)
}, err => {
  // 服務(wù)器響應(yīng)發(fā)生錯(cuò)誤時(shí)的處理
  Promise.reject(err)
})
export default instance;

2)main.ts配置項(xiàng),在main中配置開啟 axios 請求時(shí)發(fā)送請求頭

import axios from 'axios';
axios.defaults.withCredentials = true;

3)get 請求獲取令牌

import axios from '@/http'
const get_token = () => {
    console.log("aa")
   
    var post_data = JSON.stringify({
        username: "123",
        password: "1234"
    })
    axios({
        method: 'GET',
        url: axios.defaults.baseURL + '/api/get-csrf-token/',
        data: post_data
    })
        .then(function (response) {
            console.log(document.cookie)
         
        //    const token = document.cookie.split('=')[1];
            //請求成功,處理業(yè)務(wù)邏輯
            console.log(response.data.csrfToken)
            // store.state.token =token
            // 保存token
            store.state.token =response.data.csrfToken
        })
        .catch(function (error) {
            //請求失敗,處理業(yè)務(wù)邏輯
            console.log(error)
        })
}

如果不成功請留言我們一起解決

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3中集成高德地圖并實(shí)現(xiàn)平移縮放功能

    Vue3中集成高德地圖并實(shí)現(xiàn)平移縮放功能

    隨著前端技術(shù)的不斷發(fā)展,地圖應(yīng)用在我們的項(xiàng)目中越來越常見,本文將介紹如何在Vue3項(xiàng)目中集成高德地圖,并通過簡單的配置實(shí)現(xiàn)地圖的平移和縮放功能,需要的朋友可以參考下
    2024-09-09
  • Vue中tinymce富文本功能配置詳解

    Vue中tinymce富文本功能配置詳解

    TinyMCE是一款易用、且功能強(qiáng)大的所見即所得的富文本編輯器,跟其他富文本編輯器相比,有著豐富的插件,支持多種語言,能夠滿足日常的業(yè)務(wù)需求并且免費(fèi),本文小編給大家詳細(xì)介紹了Vue中tinymce富文本功能配置,需要的朋友可以參考下
    2023-11-11
  • 在vue中獲取token,并將token寫進(jìn)header的方法

    在vue中獲取token,并將token寫進(jìn)header的方法

    今天小編就為大家分享一篇在vue中獲取token,并將token寫進(jìn)header的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue+AI智能機(jī)器人回復(fù)功能實(shí)現(xiàn)

    vue+AI智能機(jī)器人回復(fù)功能實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了vue+AI智能機(jī)器人回復(fù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 八種Vue組件間通訊方式合集(推薦)

    八種Vue組件間通訊方式合集(推薦)

    這篇文章主要介紹了八種Vue組件間通訊方式合集(推薦),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • vue多級(jí)多選菜單組件開發(fā)

    vue多級(jí)多選菜單組件開發(fā)

    這篇文章主要為大家分享了vue多級(jí)多選菜單組件開發(fā)案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • vue2.0實(shí)現(xiàn)音樂/視頻播放進(jìn)度條組件

    vue2.0實(shí)現(xiàn)音樂/視頻播放進(jìn)度條組件

    這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)現(xiàn)音樂和視頻播放進(jìn)度條組件的思路及具體實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Vue實(shí)現(xiàn)百度下拉提示搜索功能

    Vue實(shí)現(xiàn)百度下拉提示搜索功能

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)百度下拉提示搜索功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻

    vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue路由傳參頁面刷新參數(shù)丟失問題解決方案

    vue路由傳參頁面刷新參數(shù)丟失問題解決方案

    這篇文章主要介紹了vue路由傳參頁面刷新參數(shù)丟失問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論