Skip to main content

Command Palette

Search for a command to run...

로그인 후 특정 페이지로 redirect 하기

Updated
2 min readView as Markdown
로그인 후 특정 페이지로 redirect 하기

게시글 작성화면이나 메인 화면에서 로그인 버튼을 누르면 로그인을 한 후 해당 페이지로 다시 돌아오는 로직을 작성하고 싶었다.

accounts/views.py

@require_http_methods(['GET', 'POST'])
@login_required
def login(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            auth_login(request, form.get_user())
            next_url = request.GET.get('next', '') 
            return redirect(next_url)
    else:
        form = AuthenticationForm()
    context = {'form': form}
    return render(request, 'accounts/login.html', context)

accounts/login.html

{% extends 'base.html' %}
{% block content %}
<h1>로그인</h1>

<form action="" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" action="" value="로그인">
</form>

{% endblock content %}

NoReverseMatch 오류가 나왔다.

쿼리스트링을 통해 HTML에서 이전 페이지의 정보를 받아온 후, next 정보를 사용하여 뷰로
리다이렉션하는 방법이 필요한 것 같다.


next 파라미터를 사용해 사용자가 로그인에 성공했을 때 이전 페이지로 리디렉션하기 위해 hidden
필드로 전달한다.

여기서 request.Get.next⁠는 현재 요청의 쿼리스트링에서 next 파라미터의 값을 가져오는 것을
의미한다.

따라서 이전 페이지의 url이 next 파라미터로 전달되어 로그인 이후에 이전 페이지로 이동할 수 있다.

<form action="" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="hiddem" name='next' value={{ request.GET.next }}>
    <input type="submit" value="로그인">
</form>

메인 페이지로는 정상적으로 접근이 되었지만 로그인 페이지로 이동하면 리디렉션의 횟수가 많다는
오류가 났다. -> 클라이언트 요청을 계속해서 보내고 있다 (무한 리디렉션 루프)에 빠진 것인데, 서버가 요청을 받고 클라이언트로 보내고는 과정이 반복된 것이다.

/accounts/login/ 라는 글자가 계속 보이는걸 보니 로그인 시도가 실패하고 다시 로그인 페이지로
돌아가고가 반복되는 것 같다.

views.py

# @require_http_methods(['GET', 'POST'])
@require_POST

post가 안돌아간다.


정말 바보같은 실수를 했다.

로그인을 하려고 하는 곳에서 @login_required 를 붙여두고 로그인을 시도하려고 했다.

@login_required
로그인된 경우만 아래 함수가 실행될 수 있도록 하고, 로그인하지 않은 상태로 아래 함수를 호출하게 되면 해당 유저는 로그인 화면으로 넘어가게 한다.

정말 허무했던 실수 끝

@require_http_methods(['GET', 'POST'])
def login(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            auth_login(request, form.get_user())
            next_url = request.GET.get('next') or 'products:main'
            return redirect(next_url)
    else:
        form = AuthenticationForm()
    context = {'form': form}
    return render(request, 'accounts/login.html', context)
62 views
P
Park2y ago

많이 배우고 있습니다

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts