[파이썬] web2py에서의 로그인 및 인증

웹 애플리케이션 개발 시 로그인과 인증은 매우 중요한 부분입니다. 웹 애플리케이션 사용자를 식별하고 인증하여 보안과 접근 제어를 강화할 수 있습니다. web2py는 파이썬으로 작성된 웹 프레임워크로, 로그인과 인증에 대한 기능을 내장하고 있어 개발자들이 편리하게 사용할 수 있습니다.

로그인 폼 추가하기

먼저, 로그인 폼을 뷰 파일에 추가해보겠습니다. views/default/login.html 파일을 열고 다음 코드를 추가합니다.


<h2>로그인</h2>
<form method="post" action="{{=URL('default', 'login')}}">
    <p>
        <input type="text" name="username" placeholder="사용자명" required>
    </p>
    <p>
        <input type="password" name="password" placeholder="비밀번호" required>
    </p>
    <p>
        <input type="submit" value="로그인">
    </p>
</form>

이 폼은 사용자명과 비밀번호를 입력받아 default 컨트롤러의 login 액션으로 POST 요청을 보내도록 설정되어 있습니다.

로그인 처리하기

로그인 폼을 추가했으니 이제 default 컨트롤러에 login 액션을 추가하고, 입력된 사용자명과 비밀번호를 검증하는 코드를 작성해보겠습니다. controllers/default.py 파일을 열고 다음 코드를 추가합니다.

def login():
    form = SQLFORM.factory(
        Field('username', requires=IS_NOT_EMPTY()),
        Field('password', 'password', requires=IS_NOT_EMPTY())
    )
    
    if form.process().accepted:
        username = form.vars.username
        password = form.vars.password
        
        # 사용자명과 비밀번호를 검증하는 로직 추가
        
        redirect(URL('default', 'home'))
    elif form.errors:
        response.flash = '로그인에 실패하였습니다.'
        
    return dict(form=form)

이 코드에서는 SQLFORM.factory() 함수를 사용하여 로그인 폼의 필드를 생성하고, 입력값에 대한 유효성 검사를 수행합니다. 그리고 폼이 제출되었을 때는 입력된 사용자명과 비밀번호를 검증하여 로그인 처리 로직을 추가하면 됩니다. 이 예시에서는 로그인이 성공하면 home 액션으로 리디렉션합니다.

세션을 이용한 인증 처리하기

로그인 성공 후에는 사용자를 식별하기 위해 세션을 활용합니다. 세션은 서버 측에 사용자 정보를 저장하여 인증 처리를 유지하는 데 사용됩니다. web2py는 세션 관리를 위한 내장 기능을 제공합니다.

로그인 성공하면 사용자 정보를 세션에 저장하고, 이후 페이지에 접근할 때마다 세션의 인증 여부를 확인하여 인증(로그인)된 사용자만 접근할 수 있도록 처리해야 합니다.

def login():
    form = SQLFORM.factory(
        Field('username', requires=IS_NOT_EMPTY()),
        Field('password', 'password', requires=IS_NOT_EMPTY())
    )
    
    if form.process().accepted:
        username = form.vars.username
        password = form.vars.password
        
        # 사용자명과 비밀번호를 검증하는 로직 추가
        
        # 사용자가 인증되면 세션에 사용자 정보 저장
        session.authenticated = True
        session.username = username
        
        redirect(URL('default', 'home'))
    elif form.errors:
        response.flash = '로그인에 실패하였습니다.'
        
    return dict(form=form)


def home():
    # 세션에 인증된 사용자 정보가 있는지 확인
    if not session.authenticated:
        redirect(URL('default', 'login'))
        
    # 인증된 사용자만 접근 가능한 로직 추가
    
    return {}

로그인 성공 후 세션에 authenticatedusername 정보를 저장하고, home 액션에서 세션 정보를 확인하여 인증된 사용자만 접근 가능하도록 처리합니다. 만약 인증되지 않은 사용자가 직접 home 페이지에 접근하면 로그인 페이지로 리디렉션됩니다.

이제 web2py에서 간단한 로그인 및 인증 기능을 구현하는 방법을 알게 되었습니다. 이를 기반으로 더 복잡한 인증 절차를 구현하거나, 사용자 권한 관리 등을 추가할 수도 있습니다. web2py의 강력한 기능을 활용하여 보안과 접근 제어의 품질을 향상시키세요.