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