사용자가 Google에 로그인 할 수 있도록 소셜 인증을 구현했습니다. 소셜 인증 시스템으로 로그인하지 않은 방문자가 UpdateView, ListView 또는 CreateView와 같은 일반보기에 액세스하지 못하도록 제한하는 방법을 이해할 수 없습니다. . 여기에 코드가 있습니다.Django 일반보기를 로그인 한 사용자 만 액세스 할 수있게 만드는 방법은 무엇입니까?
views.py
class AchievementCreate(CreateView):
form_class = AchievementForm2
model = Achievements
def form_valid(self, form):
achieves = form.save(commit=False)
achieves.resume = Resume.objects.get(pk=2)
return super(AchievementCreate, self).form_valid(form)
def home(request):
#logout(request)
uname=""
if request.method == 'POST' and 'submit' in request.POST:
submit = request.POST['submit']
if submit=="sign-out":
logout(request)
if '_auth_user_id' in request.session:
uname=sm.UserSocialAuth.objects.get(
user_id=int(request.session['_auth_user_id'])
).user
request.session['uname']=str(uname)
return render(request,'cv/home.html',{'uname': uname})
home.html을
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Home</title>
</head>
<body>
<form method="post" action="{% url 'cv:home' %}">{% csrf_token %}
{% if uname %}
Helo, {{uname}}<br>
The user already signed in. He may need to sign out<br>
<input type="submit" name="submit" value="sign-out">
{% else %}
Please sign-in<br>
<a href="{% url 'social:begin' 'google-oauth2' %}">Google login</a>
{% endif %}
</form>
</body>
</html>
urls.py
,536,urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^achievements/(?P<pk>[0-9]+)/delete/$', views.AchievementDelete.as_view(), name='achievement-delete'),
url(r'^achievements/(?P<pk>[0-9]+)/$', views.AchievementUpdate.as_view(), name='achievement-update'),
url(r'^achievements/add/$', login_required(views.AchievementCreate.as_view()), name='achievement-add'),
url(r'^home/$', views.home, name='home'),]
사용자가 로그인 한 경우에만 "AchievementCreate"클래스에 액세스 할 수있게하려고합니다. 그러나 어떻게 이해할 수 있습니까? 세션을 사용할 수 있습니까? 어떻게,이 경우에?
은'login_required' 데코레이터가 작동되지 않습니다, 당신은 당신의 CreateView의 디스패치 메소드를 오버라이드 (override) 할 수 그렇다면
request.SESSION
: 나는 당신을 참조하여 사용자 로그인에 액세스 할 수 있으리라 믿고있어? –
Nope. 그렇지 않습니다. –