Laravel 5.3 api 라우트 삽질기

라라벨 5.2까지는 routes.php 파일 하나로 라우트를 관리하였다. 5.3 부터는 /routes 디렉토리에 api.php, web.php, console.php 세 개의 파일로 나뉘어져있다.

라라벨 5.3을 설치하면 api.php 파일에 /user 가 선언되어 있다. api 라우트의 기본 prefix는 api로 설정되어 있기 때문에 /api/user 로 호출 할 수 있을거라 생각했다. 하지만 /api/user 를 호출하면 계속 로그인 화면으로 리다이렉트되었다. 로그인을 하고 시도해도 마찬가지.

검색을 통해 나와 완전히 같은 증상을 가진 질문 글을 발견했고 덕분에 원인을 알 수 있었다.

간단히 요약하면 auth:api 미들웨어를 통과하지 못했기 때문인데, auth:api를 통과하기 위해서는 요청시에 api_token 을 파라미터로 넘겨줘야 한다는 것이다.

1. users 테이블에 api_token 필드를 추가

// users_table 마이그레이션에 추가하세요.
$table->string('api_token', 60)->unique();

2. user 생성시 api_token 넣어줌

App\Http\Controllers\Aut\RegisterController::create 를 수정한다.

protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'api_token' => str_random(60),
]);
}

3. 요청시 api_token 키에 토큰값을 넣어서 요청

매뉴얼의 라우팅이나 인증, 혹은 미들웨어 항목 어디에도 auth:api 미들웨어를 통과할 수 있는 방법에 대한 안내가 없어서 덕분에 삽질을 좀 했다.

이 부분에 대한 안내가 빠진 것이 5.3에 새로 추가된 API 인증(passport)를 사용하도록 유도하기 위해서 그런것일지도 모른다는 의견을 얼핏 읽은 것 같은데 사실인지는 모르겠다.

바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서가 출간되었습니다. 어떤 내용이 담겨있는지 한 번 둘러보세요. :)