这是一个社交网络网站。它是内置的python Django。我需要将用户登录部分添加到本地存储部分中存储的值中。
-
在这个网站上有两种登录方法,一种是最终用户,另一种是公司
-
主要设置是需要用户登录时需要密钥和值来存储本地存储
-
这是用户跨站点登录所必需的,例如Facebook用户已通过Instagram加入。
-
请帮我解决这个问题?我需要修复会话中设置的cookie也
我在模型下面添加了代码。py
# Custom user
class CustomUser(AbstractUser):
""" Custom user model"""
email = models.EmailField(unique=True, validators=[EmailValidator])
is_company = models.BooleanField(default=False)
is_employee = models.BooleanField(default=False)
is_enduser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
slug = AutoSlugField(populate_from='username')
objects = CustomUserManager()
def __str__(self):
return f"{self.username}"
@property
def group_name(self):
"""
Returns a group name based on the user's id to be used by Django Channels.
Example usage:
user = User.objects.get(pk=1)
group_name = user.group_name
"""
return "user_%s" % self.id
*urls.py
app_name="帐户"url模式=[
path('login/company/', views.u_login, name='c_login'),
path('login/employee/', views.c_login, name='u_login'),
path('logout/', views.user_logout, name='logout'),
path('user-signup/', user_signup_view, name="user_signup"),
path('switch/<int:id>/', switch_user, name="user_switch"),
path('activate/<slug:uidb64>/<slug:token>/',views.activate_account, name='activate'),
path('change-pwd/<int:id>/', views.set_password, name='set_pwd'),
]
#员工副本登录
def c_login(request):
print("runned")
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
print("cd",cd)
user = authenticate(request,
username=cd['username'],
password=cd['password'],
remember_me=cd['remember_me'])
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse('feed:user_feed', args=[request.user.profile.slug]))
else:
return HttpResponse('Disabled account')
else:
messages.error(request, 'Invalid username or password')
return render(request, 'account/u_login.html', {'form': form})
else:
form = LoginForm
return render(request, 'account/u_login.html', {'form': form})
登录会话通过cookie进行检查,并根据给定的流程设置加密令牌(唯一ID、名称、电子邮件)。
使用加密令牌在Cookie中设置详细信息具有(身份证、姓名、电子邮件)
您可能需要django-allauth。你需要的大部分东西都已经实现了。https://django-allauth.readthedocs.io/en/latest/index.html
首先安装这些软件包,设置还包括会话。
https://docs.djangoproject.com/en/3.2/topics/http/sessions/
安装此软件包和会话需要添加
pip install djangorestframework-simplejwt
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
SESSION_COOKIE_SECURE = False
ENCRYPTED_COOKIE_SERIALIZER = 'json'
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'None'
SESSION_COOKIE_SAMESITE = 'None'
COMPRESS_ENCRYPTED_COOKIE = True
ENCRYPTED_COOKIE_COMPRESSION_LEVEL = 1