質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1552閲覧

LaravelPassportを使ってフロントとバックを分離したVue.jsのログインでクロスドメインエラーになる

ysk1914

総合スコア17

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/03/01 03:56

前提・実現したいこと

現在LaravelとVue.jsを使ってAPI認証の学習をしているのですが、「CORSポリシーによってブロックされています」とのエラーが発生し一向に前に進めないため質問させていただきます。

laravel側でアクセス許可するオリジンを定義していてもずっと以下のエラーが発生しております。

解決方法をご存知の方、お手数ですがお力添えをお願いいたします。

発生している問題・エラーメッセージ

Access to XMLHttpRequest at 'http://localhost:8000/api/login' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:8000' that is not equal to the supplied origin.

該当のソースコード

Vue.js

Login.vue

javascript

1<template> 2 <div class=""> 3 {{ id }} 4 <from> 5 <input type="email" v-model="email"> 6 <input type="password" v-model="password"> 7 <button value="send" @click="login()">login</button> 8 </from> 9 <button value="send" @click="hoge()">hoge</button> 10 </div> 11</template> 12 13<script> 14import axios from 'axios' 15 16export default { 17 data () { 18 return { 19 id: 'hoge', 20 email: '', 21 password: '' 22 } 23 }, 24 methods: { 25 login: function () { 26 let param = {email: this.email, password: this.password} 27 28 const axiosPost = axios.create({ 29 xsrfHeaderName: 'X-CSRF-Token' 30 }) 31 const options = {headers: { 32 'mode': 'cors' 33 }} 34 35 axiosPost.post('http://localhost:8000/api/login', param, options 36 ).then(response => { 37 console.log(response) 38 }).catch(error => { 39 console.log(error) 40 }) 41 },

Laravel

api.php

php

1Route::group(['middleware' => ['cors']], function () { 2 Route::match(["post", "options"], "/hoge", "HomeController@hoge"); 3 Route::match(['post', 'options'], '/login', 'Api\V1\Auth\LoginController@login'); 4});
Cors.php

php

1<?php 2 3namespace App\Http\Middleware; 4 5use Closure; 6 7class Cors 8{ 9 /** 10 * Handle an incoming request. 11 * 12 * @param \Illuminate\Http\Request $request 13 * @param \Closure $next 14 * @return mixed 15 */ 16 public function handle($request, Closure $next) 17 { 18 return $next($request) 19 ->header('Access-Control-Allow-Origin', 'http://localhost:8080') 20 ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') 21 ->header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept') 22 ->header('Access-Control-Allow-Credentials', 'true'); 23 } 24} 25
LoginController.php
<?php namespace App\Http\Controllers\Api\V1\Auth; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Http\JsonResponse; class LoginController extends Controller { public function login(Request $request): JsonResponse { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { $user = Auth::user(); $token = $user->createToken('Laravel Password Grant Client')->accessToken; return new JsonResponse(['token' => $token], 200); } return new JsonResponse([ 'message' => 'Unauthenticated.' ], 401); } }

試したこと

####ログイン以外のAPI通信
レスポンスを返すだけのリクエストを行ったところ、正常に200が返ってきました

javascript

1 hoge: function () { 2 const axiosPost = axios.create({ 3 xsrfHeaderName: 'X-CSRF-Token' 4 }) 5 axiosPost.post('http://localhost:8000/api/hoge', { 6 headers: { 7 mode: 'cors' 8 } 9 }).then(response => { 10 console.log('hoge') 11 console.log(response) 12 })

php

1 public function hoge(Request $request) { 2 return response()->json($request); 3 }

イメージ説明

axiosのヘッダー

以下の認証情報をリクエストするヘッダーを
axiosに追加しましたが、こちらは同様のエラーとなりました。

const axiosPost = axios.create({ xsrfHeaderName: 'X-CSRF-Token', withCredentials: true })

イメージ説明

補足情報(FW/ツールのバージョンなど)

フロント
  • Vue-cli
  • axios

ホスト
http://localhost:8080

サーバー
  • Laravel
  • Laravel Passport

ホスト
http://localhost8000

参考

https://labor.ewigleere.net/2019/01/31/axios-session-cors/

https://qiita.com/kobayashi-m42/items/c0a2609ae61a72dcc60f

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問