Skip to content

Commit e9adf9d

Browse files
committed
fix:로그인 수정
1 parent aceb63e commit e9adf9d

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

apps/users/forms.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from django.contrib.auth.forms import PasswordResetForm
44
from django.contrib.auth import get_user_model
55
from django.utils.translation import gettext_lazy as _
6+
from allauth.account.forms import SignupForm
7+
from django.utils.text import slugify
68

79
User = get_user_model()
810

@@ -22,3 +24,28 @@ def clean_email(self):
2224
raise forms.ValidationError(_("비밀번호 재설정을 할 수 있는 계정이 아닙니다."))
2325

2426
return email
27+
28+
class EmailSignupForm(SignupForm):
29+
"""
30+
일반 회원가입 화면에서 보여줄 폼.
31+
기본적으로 email, password1, password2는 SignupForm에 포함되어 있음.
32+
username을 받고 싶으면 required를 켜주면 됨.
33+
"""
34+
def __init__(self, *args, **kwargs):
35+
super().__init__(*args, **kwargs)
36+
# 닉네임/아이디 받고 싶으면 True, 아니라면 False로 두면 숨김
37+
if "username" in self.fields:
38+
self.fields["username"].required = True
39+
self.fields["username"].label = "닉네임"
40+
self.fields["username"].help_text = ""
41+
42+
def save(self, request):
43+
user = super().save(request)
44+
# 로컬 가입 표시(비번 재설정 허용 기준과 일치)
45+
if hasattr(user, "provider") and not user.provider:
46+
user.provider = "local"
47+
# username unique 보호(필요 시 슬러그 처리)
48+
if hasattr(user, "username") and user.username:
49+
user.username = slugify(user.username) or user.username
50+
user.save()
51+
return user

config/settings.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,6 @@ def _split_env_list(key):
104104
]
105105

106106
WSGI_APPLICATION = 'config.wsgi.application'
107-
TEMPLATES[0]["OPTIONS"]["context_processors"] += [
108-
"apps.places.context_processors.public_settings",
109-
]
110107

111108
# Database
112109
# https://docs.djangoproject.com/en/5.2/ref/settings/#databases
@@ -208,12 +205,17 @@ def _split_env_list(key):
208205

209206

210207
# 이메일 로그인 관련 설정
211-
ACCOUNT_LOGIN_METHODS = {"email"}
212-
ACCOUNT_SIGNUP_FIELDS = ["username*", "email*", "password1*", "password2*"]
208+
ACCOUNT_AUTHENTICATION_METHOD = "email"
209+
ACCOUNT_SIGNUP_FIELDS = []
213210
ACCOUNT_UNIQUE_EMAIL = True #이메일 중복 허용 불가
214211
SOCIALACCOUNT_AUTO_SIGNUP = True
215212
SOCIALACCOUNT_LOGIN_ON_GET = True
216213
SOCIALACCOUNT_ADAPTER = 'apps.users.adapter.MySocialAccountAdapter'
214+
ACCOUNT_EMAIL_REQUIRED = True
215+
ACCOUNT_USERNAME_REQUIRED = False # (소셜 자동가입 시 username 때문에 폼 안 뜨게)
216+
ACCOUNT_EMAIL_VERIFICATION = "none" # 개발 중엔 끔(운영 전환 시 "mandatory")
217+
SOCIALACCOUNT_EMAIL_REQUIRED = True
218+
SOCIALACCOUNT_QUERY_EMAIL = True
217219

218220
AUTHENTICATION_BACKENDS = (
219221
#추가 장고에서 사용자의 이름을 기준으로 로그인하도록 설정
@@ -255,7 +257,8 @@ def _split_env_list(key):
255257
# 제공하는 값이 다르기 때문에 가져올 데이터를 설정한 이후 추가/삭제 해보면 됩니다.
256258
# SCOPE값에 제공하지 않는 값을 넣거나 하는 이유로 오류가 나올 수 있음
257259
"SCOPE": [
258-
260+
"profile_nickname",
261+
"account_email",
259262
],
260263
#추가
261264
"AUTH_PARAMS": {
@@ -330,3 +333,8 @@ def _split_env_list(key):
330333
CSRF_TRUSTED_ORIGINS = _split_env_list("CSRF_TRUSTED_ORIGINS")
331334
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
332335

336+
# settings.py
337+
ACCOUNT_FORMS = {
338+
"signup": "apps.users.forms.EmailSignupForm",
339+
}
340+

0 commit comments

Comments
 (0)