ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Sanctum(spa login, auth)
    Laravel 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

    댓글

Designed by Tistory.