使用laravel做API,passport認(rèn)證,vue做client。在postman中能夠正常獲取數(shù)據(jù),在vue中報(bào)錯(cuò)Access-Control-Allow-Origin
下面是我的代碼
laravel AuthServiceProvider.php
public function boot()
{
$this->registerPolicies();
// 配置passport路由
Passport::routes(null,['prefix'=>'api/oauth','middleware'=>'acc.h']);
}
laravel acc.h中間件
public function handle($request, Closure $next)
{
header("Access-Control-Allow-Origin:*");
return $next($request);
}
php artisan route:list部分截圖
vue js script
axios({
method: 'post',
url: '/oauth/token', // main.js中已經(jīng)設(shè)置了全局的baseURL
data: {
client_id: '2',
client_secret: 'kCvv28qy25rIw5IYvAwpIHNQvBMnH6FElrzxqvqP',
username: 'user1@api.test',
password: '111111',
grant_type: 'password'
}
})
.then(response => {
console.log(response.data)
})
在postman中測(cè)試截圖
在chrome中測(cè)試vue的截圖
附帶身份憑證的請(qǐng)求與通配符 對(duì)于附帶身份憑證的請(qǐng)求,服務(wù)器不得設(shè)置 Access-Control-Allow-Origin 的值為“*”。
這是因?yàn)檎?qǐng)求的首部中攜帶了 Cookie 信息,如果 Access-Control-Allow-Origin
的值為“*”,請(qǐng)求將會(huì)失敗。而將 Access-Control-Allow-Origin 的值設(shè)置為
http://foo.example,則請(qǐng)求將成功執(zhí)行。
來自mdn
所以把*改成你的請(qǐng)求域名http://localhost:8080
如果還不行,
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: *
這些字段也都設(shè)置一下
使用各種方法,搗鼓了兩天,最后使用jquery的POST與axios進(jìn)行對(duì)比,才發(fā)現(xiàn)原來默認(rèn)情況下,axios將JavaScript對(duì)象序列化為JSON。
看文檔很重要??!axios只是粗略的看了下前面的選項(xiàng)配置,后面部分忽略了,才導(dǎo)致在這個(gè)問題上卡了很長(zhǎng)的時(shí)間。
廢話少說了,繼續(xù)!
要發(fā)送數(shù)據(jù)到服務(wù)器必須把json格式化為字符串。參見axios的Using application/x-www-form-urlencoded format
首先,服務(wù)器上的Access-Control-Allow-Origin還是需要的
然后就是使用axios的推薦解決方法,安裝qs
npm install qs --save-dev
引入qs
import qs from 'qs'
使用qs.stringify(data)對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行格式化
axios(
{
data: qs.stringify(
{
client_id: '2',
...
}
)
...
}
)
另外,很感謝樓上兩位碼友的幫忙??!
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。