로그인 기능 구현하기

template 수정하기

login.html

{% extends 'base.html' %}

{% block content %}

{% if error %}
{{ error }}
<br>
<br>
{% endif %}

<h1>Login</h1>

<form method="POST" action="{% url 'login' %}">

    {% csrf_token %}
    Username:
    <br>
    <input name="username" type="text" value="">
    <br>
    Password:
    <br>
    <input name="password" type="password" value="">
    <br>
    <br>
    <input class="btn btn-primary" type="submit" value="Login">
</form>

{% endblock %}

위와 같이 코드를 수정해줍니다. signup페이지와 동일 논리입니다.

view 수정하기

views.py

def login(request):
    if request.method == 'POST':
				username = request.POST['username']
		    password = request.POST['password']
        user = **auth.authenticate(request, username=username, password=password)**
        **if user is not None:
            auth.login(request, user)**
            return redirect('home')
        else:
            return render(request, 'login.html', **{'error': 'username or password is incorrect.'}**)
    else:
        return render(request, 'login.html')

login 함수를 위와 같이 수정해줍니다.

회원가입을 한 회원만 로그인이 가능한 기능을 구현하기 위해

  1. user = **auth.authenticate(request, username=username, password=password)** 구문을 넣어줍니다.
  1. if user is not None: auth.login(request, user)
  1. **else**

Navbar 수정하기

로그인을 하면 로그인 여부에따라 signup이나 글쓰기 버튼이 나오지 않게끔 해야합니다. 태그를 활용해서 수정해봅시다.

navbar관련 코드가 있는 base.html로 갑시다.

**{% if user.is_authenticated %}**
<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown"
        aria-haspopup="true" aria-expanded="false">환영합니다. **{{ user.username }}** 님!</a>
    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
        <a class="dropdown-item" href="{% url 'new' %}">글쓰기</a>
        **<a class="dropdown-item" href="{% url 'logout' %}">Logout</a>**
    </div>
</li>
**{% else %}**
<li class="nav-item">
    <a class="nav-item nav-link" href="{% url 'signup' %}">Signup</a>
</li>
<li class="nav-item">
    <a class="nav-item nav-link" href="{% url 'login' %}">Login</a>
</li>
**{% endif %}**