2017-05-26 65 views
0

我正在學習Vuejs 2,並建立一個客戶目錄應用程序的樂趣和測試,Laravel 5.4作爲後端(API)與Cors和護照包。和Vuejs作爲vue-router和axios的前端我能夠登錄並將令牌存儲在cookie中我可以毫無疑問地獲得所有客戶,但是當我嘗試創建新客戶時,在控制檯中出現以下錯誤POST http://localhost:8000/api/customer 401(未授權) in network {「error」:「Unauthenticated。」}。如果我評論auth:api中間件,我可以發佈沒有任何錯誤。Vuejs 2與Laravel 5.4後端,後(未經授權)錯誤

路由/ api.php

 Route::get('/', '[email protected]'); 
    Route::get('customer/{id}', '[email protected]'); 
Route::post('customer', '[email protected]'); 
Route::delete('customer/{id}', '[email protected]'); 
Route::put('customer/{id}', '[email protected]'); 

CustomerCtrl.php

<?php 

namespace App\Http\Controllers; 

use App\Customer; 
use Illuminate\Http\Request; 

class CustomerCtrl extends Controller 
{ 
    public function __construct() 
    { 
     $this->middleware('auth:api'); 
    } 

    public function index() 
    { 
     return response()->json(Customer::all(), 200); 
    } 

    public function show($id) 
    { 
     return response()->json(Customer::findOrFail($id), 200); 
    } 

    public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'first_name' => 'required', 
      'last_name' => 'required', 
      'email' => 'required|email', 
      'phone' => 'required', 
      'address' => 'required', 
      'country' => 'required', 
     ]); 
     Customer::create($request->all()); 
     return response()->json('Customer Created', 200); 
    } 

    public function update(Request $request, $id) 
    { 
     $this->validate($request, [ 
      'first_name' => 'required', 
      'last_name' => 'required', 
      'email' => 'required|email', 
      'phone' => 'required', 
      'address' => 'required', 
      'country' => 'required', 
     ]); 
     $customer = Customer::findOrFail($id); 
     $customer->update($request->all()); 
     return response()->json('Customer Updated', 200); 
    } 

    public function destroy(Request $request, $id) 
    { 
     $customer = Customer::findOrFail($id); 
     $customer->forceDelete(); 
     return response()->json('Customer Deleted', 200); 
    } 
} 

新客戶組分(vuejs)

<template> 
<div class="add-customer"> 
    <h1 class="page-header">Add Customer</h1> 
    <div v-if="isErrors" class="alert alert-danger"> 
    <ul> 
     <li v-for="error in errors"> 
     {{error[0]}} 
     </li> 
    </ul> 
    </div> 
    <form @submit.prevent> 
    <div class="form-group"> 
     <label for="firstName">First Name</label> 
     <input type="text" id="firstName" v-model="first_name" class="form-control"> 
    </div> 
    <div class="form-group"> 
     <label for="lastName">Last Name</label> 
     <input type="text" id="lastName" v-model="last_name" class="form-control"> 
    </div> 
    <div class="form-group"> 
     <label for="email">Email</label> 
     <input type="text" id="email" v-model="email" class="form-control"> 
    </div> 
    <div class="form-group"> 
     <label for="Phone">Phone</label> 
     <input type="text" id="Phone" v-model="phone" class="form-control"> 
    </div> 
    <div class="form-group"> 
     <label for="country">Country</label> 
     <input type="text" id="country" v-model="country" class="form-control"> 
    </div> 
    <div class="form-group"> 
     <label for="address">Adress</label> 
     <textarea type="text" id="address" v-model="address" class="form-control" rows="3"></textarea> 
    </div> 
    <div class="form-group"> 
     <button @click.prevent="addCustomer" class="btn btn-primary">Submit</button> 
    </div> 
    </form> 
</div> 
</template> 

<script> 
export default { 
    name: 'add-customer', 
    data() { 
    return { 
     first_name: '', 
     last_name: '', 
     address: '', 
     phone: '', 
     country: '', 
     email: '', 
     errors: {}, 
     isErrors: false 
    } 
    }, 
    head: { 
    title: { 
     inner: 'Add Customer' 
    }, 
    }, 
    methods: { 
    addCustomer() { 
     this.$http.post('http://localhost:8000/api/customer', { 
     headers: { 
      'Authorization':'Bearer ' + this.$cookie.get('token') 
     }, 
     first_name: this.first_name, 
     last_name: this.last_name, 
     address: this.address, 
     phone: this.phone, 
     country: this.country, 
     email: this.email 
     }).then(res => { 
     console.log(res); 
     this.$router.push({ 
      name: 'Customers' 
     }) 
     }).catch(res => { 
     this.isErrors = true; 
     this.errors = res.response.data; 
     console.log(res); 

     }); 
    } 
    } 
} 
</script> 
<style scoped> 

</style> 

Login.vue組件

methods: { 
    login() { 
     const data = { 
     client_id: 4, 
     client_secret: '55bC4Ud1ariLqnHSk1fxKiKHF8FDI8NTWHR5d13k', 
     grant_type: 'password', 
     username: this.email, 
     password: this.password 

     } 
     this.$http.post('http://localhost:8000/oauth/token/', data).then(res => { 
     console.log(res); 
     this.$cookie.set('api_token', res.data.access_token, 1); 
     this.$router.push({ 
      name: 'Customers' 
     }) 
     }).catch(res => { 
     this.isErrors = true; 
     this.errors = res.response.data; 
     console.log(res); 
     }); 
    } 
    } 

回答

2

通過在main.js(Vue)中定義默認的axios baseurl和頭文件來解決:)。

main.js

axios.defaults.baseURL = 'http://localhost:8000/api'; 
axios.defaults.headers.common['Authorization'] = "Bearer " + 
VueCookie.get('api_token'); 

併除去所有本地定義的報頭中的所有組件。

0

使用XSRF令牌或以下添加到api/app/Http/Middleware/VerifyCsrfToken.php

protected $except = [ 
    'customer', 
    'customer/*' 
    'customer/*' 
]; 

這將禁用XSRF令牌。請謹慎使用。

相關問題