Laravel 5.6 :: JWT Token 연동하기
Laravel 5.6 :: JWT Token 연동하기
우선 시작하기 전에 기본적인 프로젝트 생성과 DB 연동 및 마이그레이트까지 완료 된 이후에 진행할것을 추천합니다.
1. JWT Auth 설치하기
$composer require tymon/jwt-auth
2. JWT 설정하기 :: config/app.php 파일에 아래와같이 추가해줍니다.
. . . 'providers' = > [ . . . Tymon \ JWTAuth \ Providers \ JWTAuthServiceProvider :: class , ] . . . 'aliases' = > [ . . . 'JWTAuth' = > Tymon \ JWTAuth \ Facades \ JWTAuth :: class , ]
3. 설정 실행하기
$ php artisan vendor : publish -- provider = "Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
4. 시크릿키 생성하기
$php artisan jwt :generate
정상적으로 생성이 되었으면 config/jwt.php 파일 안에 시크릿키가 생성된걸 확인 할 수 있습니다.
* 키 생성중 handle() 을 찾을 수 없다거나 하는 에러가 나면
vendor/tymon/src/Commands/JWTGenerateCommand.php 파일에
public function handle() { $this->fire(); } <- 이 부분을 추가해 주신후 다시 실행해 주세요.
5 . app/Http/Kernal.php 에 아랫 부분을 추가해주세요.
protected $ routeMiddleware = [ . . . 'jwt.auth' = > \ Tymon \ JWTAuth \ Middleware \ GetUserFromToken :: class , 'jwt.refresh' = > \ Tymon \ JWTAuth \ Middleware \ RefreshToken :: class , ] ;
이렇게까지 하시면 기본적인 JWT 토큰 설정이 끝입니다.
이제 실제로 사용 될 기본적인 로그인/ 회원가입/ 로그아웃 기능을 구현해봅시다.
1. 컨트롤러 생성하기
$php artisan make:controller AuthController
2. 라우터에 API 추가하기 ( routes/api.php )
Route :: post ( 'signup' , 'AuthController@register' ) ; // sign up
Route :: post ( 'login' , 'AuthController@login' ) ; // login
Route :: group ( [ 'middleware' = > 'jwt.auth' ] , function ( ) { Route :: post ( 'auth/logout' , 'AuthController@logout' ) ; // logout } ) ; Route :: middleware ( 'jwt.refresh' ) -> get ( '/token/refresh' , 'AuthController@refresh' ) ; // refresh token
3. 회원가입 리퀘스트 생성
$ php artisan make : request RegisterFormRequest
RegisterFormRequest.php 파일에 아래 부분을 추가해주세요
class RegisterFormRequest extends FormRequest { public function authorize ( ) { return true ; } public function rules ( ) { return [ 'name' = > 'required|string|unique:users' , 'email' = > 'required|email|unique:users' , 'password' = > 'required|string|min:6|max:10' , ] ; } }
4. AuthController.php 를 구현해줍니다. // sign up public function register(RegisterFormRequest $request) { $user = new User; $user->email = $request->email; $user->name = $request->name; $user->password = bcrypt($request->password); $user->save(); return response([ 'status' => 'success', 'data' => $user ], 200); }
// login public function login(Request $request) { $credentials = $request->only('email', 'password'); if ( ! $token = JWTAuth::attempt($credentials)) { return response([ 'status' => 'error', 'error' => 'invalid.credentials', 'msg' => 'Invalid Credentials.' ], 400); } return response([ 'status' => 'success', 'token' => $token ]); }
// user data public function user(Request $request) { $user = User::find(Auth::user()->id); return response([ 'status' => 'success', 'data' => $user ]); }
// logout public function logout() { JWTAuth::invalidate(); return response([ 'status' => 'success', 'msg' => 'Logged out Successfully.' ], 200); }
// refresh token public function refresh() { return response([ 'status' => 'success' ]); }
이렇게까지 하면 기본적인 JWT API 까지 생성이 되었습니다.
확인은 Postman 을 통해서 간단하게 테스트 해보실 수 있어요.
from http://foolgenius.tistory.com/36 by ccl(A) rewrite - 2020-03-06 15:20:59
댓글
댓글 쓰기