書籍(Laravel Webアプリケーション開発)でLaravelの勉強をしています。
JWT認証のところでトークン情報を取得するためにcurlコマンドを実行すると、
curl: (7) Failed to connect to localhost port 80: Connection refused
のエラーが出ます。vagrant upして(master)ディレクトリでcurlコマンド実行しています。
調べると同じような問題に数多くの人が直面していていろいろやったのですが、解決できずどなたかご教授お願いします。
試したこと
0. 前回curlができなかった時には.envのDB_PORTを3306にして解決したので試したがだめ。
0. 番号リストport80が使われている?ということでlocalhostに
localhost:3000とかlocalhost:8000とか127.0.0.1にしてみたがエラーのportが変わるだけ。
- 番号リストcurl -I www.google.comを実行するとエラーはでません。
Laravel5.5 vagrant virtualbox Homestead
tymon/jwt-authの準備
<?php declare(strict_types=1); namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; public function getJWTIdentifier(): int { return $this->getKey(); } public function getJWTCustomClaims(): array { return []; } }
ドライバの追加
'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'user_token', 'driver' => 'jwt', 'provider' => 'users', ], ],
ルーティング作成
Route::group(['middleware' => 'api'], function ($router) { Route::post('/users/login', 'User\LoginAction'); Route::post('/users', 'User\RetrieveAction')->middleware('auth:api'); });
TokenResponderクラス
<?php declare(strict_types=1); namespace App\Http\Responder; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response; class TokenResponder { public function __invoke($token, int $ttl): JsonResponse { if(!$token) { return new JsonResponse([ 'error' => 'Unauthorized' ],Response::HTTP_UNAUTHORIZED); } return new JsonResponse([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => $ttl ],Response::HTTP_OK); } }
ログインコントローラクラス
<?php declare(strict_types=1); namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; use App\Http\Responder\TokenResponder; use Illuminate\Auth\AuthManager; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Tymon\JWTAuth\JWTGuard; final class LoginAction extends Controller { private $authManager; public function __construct(AuthManager $authManager) { $this->authManager = $authManager; } public function __invoke(Request $request, TokenResponder $responder): JsonResponse { /** @var JWTGuard $guard */ $guard = $this->authManager->guard('api'); $token = $guard->attempt([ 'email' => $request->get('email'), 'password' => $request->get('password'), ]); return $responder( $token, $guard->factory()->getTTL() * 60 ); } }
curlでトークン情報を取得
$ curl -X POST 'http://localhost/api/users/login' -H 'accept: application/json' -H 'content-type: application/json' -d '{ "email": "mail@example.com", "password": "password" }'
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/12 07:02
2020/07/12 10:15
2020/07/12 22:09