(各バージョン)
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が原因としているため他に原因が分かる方や修正の仕方が分かる方がいましたらご教授お願いします。
あなたの回答
tips
プレビュー