Django로 instagram 만들어보기 (6) - 회원가입, 로그인

swb·2022년 11월 27일
0

django

목록 보기
11/11

0. 암호화 종류

  • 단방향 복호화 불가능
  • 양방향 복호화 가능
  • 패스워드는 단방향을 쓴다.

1. 회원가입 및 로그인

  • 사용자가 입력한 데이터를 토대로 회원가입을 진행한다.
  • 회원가입이 완료되면 로그인 페이지로 넘어간다.

user/join.html

    $('#join_button').click(function () {

        let email = $('#input_email').val();
        let name = $('#input_name').val();
        let password = $('#input_password').val();
        let nickname = $('#input_nickname').val();

        console.log(email);

        $.ajax({
            url: "/user/join",
            data: {
                email: email,
                nickname: nickname,
                password: password,
                name: name
            },
            method: "POST",
            success: function (data) {
                console.log("성공");
                alert("회원가입 성공");
                location.replace('/user/login');
            },
            error: function (request, status, error) {
                console.log("실패");
            },
            complete: function () {
                console.log("완료");
            }
        })
    });
  • 회원가입을 한 이메일과 패스워드를 입력한다.
  • 로그인이 완료되면 메인 페이지로 이동한다.

user/login.html

    $('#login_button').click(function () {
        let email = $('#input_email').val();
        let password = $('#input_password').val();

        console.log(email);

        $.ajax({
            url: "/user/login",
            data: {
                email: email,
                password: password,
            },
            method: "POST",
            success: function (data) {
                console.log("성공");
                alert("로그인 성공");
                location.replace('/');
            },
            error: function (request, status, error) {
                console.log("실패");
            },
            complete: function () {
                console.log("완료");
            }
        })
    });
  • 회원가입도 유사하다.

user/views.py

    def post(self, request):
        # 로그인
        email = request.data.get("email", None)
        password = request.data.get('password', None)

        user = User.objects.filter(email=email).first()

        if user is None:
            return Response(status=404, data=dict(message="회원정보가 잘못되었습니다.")) # 해킹 방지

        if user.check_password(password):
            # 로그인을 했다. 세션 or 쿠키에 넣는다.
            request.session['email'] = email
            return Response(status=200)
        else:
            return Response(status=400, data=dict(message="회원정보가 잘못되었습니다.")) # 해킹 방지

2. 로그인 한 유저 정보 메인에 띄우기

  • 세션에 저장해두고 nickname과 name을 우측에 표시해주면 된다.

content/views.py

        email = request.session['email']
        if email is None:
            return render(request, 'user/login.html')

        user = User.objects.filter(email=email).first()
        if email is None:
            return render(request, 'user/login.html')

        return render(request, 'jinstagram/main.html', context=dict(feed_list=feed_list, user=user))

main.html

{{ user.nickname }}
{{ user.name }}

출처

profile
개발 시작

0개의 댓글