いつも大変お世話になっております。
表題について質問です。
現在以下の環境下でログイン機能を実装しております。
環境
・Nextjs
・Django==4.0.1
・django-allauth==0.47.0
・dj-rest-auth==2.2.1
・django-cors-headers==3.10.1
REST APIです。
Signup は実装できました。
ただ、Loginした後にaccess_tokenなどは取得できたものの、
cookieに保存することができません。
response header は以下のようになっています。
Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: http://localhost:3000 Allow: POST, OPTIONS Content-Length: 715 Content-Type: application/json Cross-Origin-Opener-Policy: same-origin Date: Mon, 10 Jan 2022 11:46:56 GMT Referrer-Policy: same-origin Server: WSGIServer/0.2 CPython/3.9.7 Set-Cookie: jwt-auth=〇〇; expires=Mon, 10 Jan 2022 12:46:56 GMT; HttpOnly; Max-Age=3600; Path=/; SameSite=None; Secure Set-Cookie: csrftoken=〇〇; expires=Mon, 09 Jan 2023 11:46:56 GMT; Max-Age=31449600; Path=/; SameSite=None; Secure Set-Cookie: sessionid=〇〇; expires=Mon, 24 Jan 2022 11:46:56 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=None; Secure Vary: Accept, Cookie, Origin X-Content-Type-Options: nosniff X-Frame-Options: DENY
なぜ、保存ができないのかわかりません。
助けてもらえると嬉しいです。
settings.py / Django
python
1INSTALLED_APPS = [ 2 # … 3 'corsheaders', 4 # … 5] 6 7MIDDLEWARE = [ 8 # … 9 'corsheaders.middleware.CorsMiddleware', 10 # … 11] 12 13# *---------------------------* 14# CORS 15# *---------------------------* 16CORS_ALLOWED_ORIGINS = [ 17 'http://127.0.0.1:3000', 18 'http://localhost:3000', 19] 20CORS_ORIGIN_WHITELIST = ( 21 'localhost:3000/', 22 'localhost:3000', 23 '127.0.0.1:3000/', 24 '127.0.0.1:3000', 25) 26CORS_ORIGIN_ALLOW_ALL = False 27CORS_ALLOW_CREDENTIALS = True 28 29# *---------------------------* 30# dj rest auth 31# *---------------------------* 32REST_FRAMEWORK = { 33 34 # … 35 36 'DEFAULT_AUTHENTICATION_CLASSES': ( 37 "dj_rest_auth.utils.JWTCookieAuthentication", 38 ), 39 40} 41 42 43REST_USE_JWT = True 44JWT_AUTH_COOKIE = 'jwt-auth' 45JWT_AUTH_SECURE = True 46JWT_AUTH_SAMESITE = 'None' 47SESSION_COOKIE_SAMESITE = 'None' 48SESSION_COOKIE_SECURE = True 49CSRF_COOKIE_SAMESITE = 'None' 50CSRF_COOKIE_SECURE = True 51 52SIMPLE_JWT = { 53 54 'USER_ID_FIELD' : 'uuid', 55 'AUTH_HEADER_TYPES' : ('JWT',), 56 'ACCESS_TOKEN_LIFETIME': timedelta( minutes = 60 ), 57 # 'ROTATE_REFRESH_TOKENS': True, 58 59} 60 61
login.js / Next.js
javascript
1const res = await axios.post("http://127.0.0.1:8000/api/auth/login/", 2 data, {withCredentials: true}) 3 4 console.log(res.data);
ありがとうございます。
あなたの回答
tips
プレビュー