Laravel

Sanctum(spa login, auth)

짱구를왜말려? 2020. 3. 26. 15:02
반응형
SMALL

1. 기본세팅

composer require laravel/sanctum laravel/ui
php artisan ui react --auth
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate

 

@ app/Http/Kernel.php

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

'api' => [
    EnsureFrontendRequestsAreStateful::class,
    'throttle:60,1',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

 

@ .env(백엔드 돌아가는 도메인과 일치해야돼 이게, 실제 배포하고나서는 실제 주소로 해야겠지)

SESSION_DOMAIN=[.도메인 주소 => 세션 도메인은 localhost일 때는 localhost만 쓰면 되는데 실제 prod 레벨에서는 .shaty.co.kr처럼 맨 앞에 . 붙여야돼]

SANCTUM_STATEFUL_DOMAINS=[도메인 주소]

@ .env 예시

// 루트 도메인을 쓰는 사이트 설정
SESSION_DOMAIN=.vrawer.com
SANCTUM_STATEFUL_DOMAINS=vrawer.com

// 서브 도메인을 쓰는 사이트 설정
SESSION_DOMAIN=.vrawer.com
SANCTUM_STATEFUL_DOMAINS=lunch.vrawer.com

@ config/cors.php

'paths' => ['api/*', 'login', 'logout', 'sanctum/csrf-cookie'],

'supports_credentials' => true

 

@resources/js/bootstrap.js

axios.defaults.withCredentials = true;

@ api.php

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

@ User.php

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

2. 프론트 회원가입, 로그인 작업해놓기

@ 로그인

axios.get('/sanctum/csrf-cookie').then(response => {
    axios.post("/login", {
    	email: "email@naver.com",
        password: "password"
    })
    .then(response => {
		// 로그인 처리
    })
});

@ 로그아웃

axios.post("/logout")
.then(response => // 로그아웃 처리);

@ 사용자 정보 얻기

axios.get("/api/user").then(response => {})

 

* 주의

로그인 테스트 해보다 계속 home으로 redirect 시키면 쿠키값이 남아있어서 그런거임. 쿠키값 삭제하고 다시 로그인 테스트해

LIST