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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

1856閲覧

Lravel apiのレスポンスのcontent-typeが"text/html; charset=UTF-8"になってしまう

hiroki88

総合スコア66

Laravel

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2020/12/02 16:27

編集2020/12/03 16:02

(各バージョン)
laravel:6.18.40
PHP:7.2.31
nginx:1.19.0"

(している事)
現在dockerを使用しアプリケーションの作成をしています。
サーバーにはnginxを使用しLaravelとvue.jsで開発してます。

(やりたい事)
API(会員登録、ログイン)を呼び出した時のレスポンスを受け取りたい。
レスポンスには会員情報をjson形式で受け取りたいです。

(困っている事)
レスポンスは返ってきているのですが、content-typeが"text/html; charset=UTF-8"に
なってしまっているせいでjsonの会員情報ではなくhtmlが返ってきてしまっている。
下記はログインAPIを叩いた時のレスポンスになります。
本来はdata:""の値の箇所がjsonになるはずがhtmlになってしまっています。

response

1auth:Object 2 user:Object 3  config:Object 4  data:"<!doctype html>\n<html lang="ja">\n<head>\n <meta charset="utf-8">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <title>Laravel</title>\n\n <!-- Scripts -->\n <script src="/js/app.js?id=7e1720473a5e77dd3ad9" defer></script>\n\n <!-- Fonts -->\n <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Merriweather|Roboto:400">\n <link rel="stylesheet" href="https://unpkg.com/ionicons@4.2.2/dist/css/ionicons.min.css">\n\n <!-- Styles -->\n <link rel="stylesheet" href="https://hypertext-candy.s3-ap-northeast-1.amazonaws.com/posts/vue-laravel-tutorial/app.css">\n</head>\n<body>\n <div id="app"></div>\n</body>\n</html>" 5  headers:Object 6   cache-control:"no-cache, private" 7   connection:"keep-alive" 8   content-type:"text/html; charset=UTF-8" 9   date:"Wed, 02 Dec 2020 07:15:23 GMT" 10   server:"nginx/1.19.0" 11   transfer-encoding:"chunked" 12   x-powered-by:"PHP/7.2.31" 13  request:XMLHttpRequest 14  status:200 15  statusText:"OK"

(原因)
特にlaravelのフォルダ内でcontent-typeをいじるような事はしていないので
nginxの設定で直るんじゃないかなと勝手に推測を立てております...。
合っているかは分かりませんが。

(やってみた事)
nginx側でcontent-typeを設定できる記事が合ったので試しにしてみましたが
コンテナを再起動した時にnginxでエラーが出てしまいました...。

【ファイルを追記しました】
ちなみにRouteServiceProvider.phpのmapApiRoutes関数の->middleware('api')を->middleware('web')に変更しております。参考にしている記事にapiをwebに修正するように載っていたため変更しています。そこが原因でしょうか?
(記事)
今回実装する API は内部からしか呼ばれない上にクッキー認証を行うステートフルなものなので、ミドルウェアグループは画面と同じ web に設定します。

↓RouteServiceProvider.php

PHP

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 6use Illuminate\Support\Facades\Route; 7 8class RouteServiceProvider extends ServiceProvider 9{ 10 /** 11 * This namespace is applied to your controller routes. 12 * 13 * In addition, it is set as the URL generator's root namespace. 14 * 15 * @var string 16 */ 17 protected $namespace = 'App\Http\Controllers'; 18 19 /** 20 * Define your route model bindings, pattern filters, etc. 21 * 22 * @return void 23 */ 24 public function boot() 25 { 26 // 27 28 parent::boot(); 29 } 30 31 /** 32 * Define the routes for the application. 33 * 34 * @return void 35 */ 36 public function map() 37 { 38 $this->mapApiRoutes(); 39 40 $this->mapWebRoutes(); 41 42 // 43 } 44 45 /** 46 * Define the "web" routes for the application. 47 * 48 * These routes all receive session state, CSRF protection, etc. 49 * 50 * @return void 51 */ 52 protected function mapWebRoutes() 53 { 54 Route::middleware('web') 55 ->namespace($this->namespace) 56 ->group(base_path('routes/web.php')); 57 } 58 59 /** 60 * Define the "api" routes for the application. 61 * 62 * These routes are typically stateless. 63 * 64 * @return void 65 */ 66 protected function mapApiRoutes() 67 { 68 Route::prefix('api') 69 ->middleware('web') 70 ->namespace($this->namespace) 71 ->group(base_path('routes/api.php')); 72 } 73}

↓api.php

PHP

1<?php 2 3use Illuminate\Http\Request; 4 5/* 6|-------------------------------------------------------------------------- 7| API Routes 8|-------------------------------------------------------------------------- 9| 10| Here is where you can register API routes for your application. These 11| routes are loaded by the RouteServiceProvider within a group which 12| is assigned the "api" middleware group. Enjoy building your API! 13| 14*/ 15 16// Route::middleware('auth:api')->get('/user', function (Request $request) { 17// return $request->user(); 18// }); 19 20//会員登録 21Route::post('/register', 'Auth\RegisterController@register')->name('register'); 22//ログイン 23Route::post('/logout', 'Auth\LoginController@logout')->name('logout'); 24//ログアウト 25Route::post('/login', 'Auth\LoginController@login')->name('login');

↓LoginController.php

PHP

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use Illuminate\Foundation\Auth\AuthenticatesUsers; 7use Illuminate\Http\Request; 8use App\Models\Account; 9 10class LoginController extends Controller 11{ 12 /* 13 |-------------------------------------------------------------------------- 14 | Login Controller 15 |-------------------------------------------------------------------------- 16 | 17 | This controller handles authenticating users for the application and 18 | redirecting them to your home screen. The controller uses a trait 19 | to conveniently provide its functionality to your applications. 20 | 21 */ 22 23 use AuthenticatesUsers; 24 25 /** 26 * Where to redirect users after login. 27 * 28 * @var string 29 */ 30 protected $redirectTo = '/home'; 31 32 /** 33 * Create a new controller instance. 34 * 35 * @return void 36 */ 37 public function __construct() 38 { 39 $this->middleware('guest')->except('logout'); 40 } 41 42 protected function authenticated(Request $request, $user, Account $account) 43 { 44 $serch = $request->login_id; 45 $getUser = $account::where('login_id', $serch)->first(); 46 return $getUser; 47 } 48 49 protected function loggedOut(Request $request) 50 { 51 // セッションを再生成する(セッションID固定化攻撃対策) 52 $request->session()->regenerate(); 53 54 return response()->json(); 55 } 56 57 //emailからlogin_idに変更(オーバライド) 58 /** 59 * Get the login username to be used by the controller. 60 * 61 * @return string 62 */ 63 public function username() 64 { 65 return 'login_id'; 66 } 67}

仮説でnginxが原因としているため他に原因が分かる方や修正の仕方が分かる方がいましたらご教授お願いします。

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

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

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

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

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

kawax

2020/12/02 23:02

どう考えてもLaravel側が原因なのでLaravelのコードが必要。
hiroki88

2020/12/03 01:38

そうなんですね、主にどこのコードが必要になりますか?
kyoya0819

2020/12/03 01:59 編集

RouteとRouteServiceProviderとControllerがあれば多分解決できると思います。
hiroki88

2020/12/03 15:47

ただいま追加致しました。 一度見て頂けると嬉しいです。よろしくお願いいたします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問