2017-05-26 58 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令牌。请谨慎使用。

相关问题