Esempio n. 1
0
def change_pw():
    if 'username' in session and 'id' in session:  # 로그인이 되어있는지 확인하는 조건문
        if request.method == 'POST':
            old_password = request.form[
                'old_password']  # Client에서 입력한 값을 저장하는 변수(현재 지정된 비밀번호 값)
            old_password_hash = db.session.query(func.sha2(old_password, 224))
            user = User.query.filter_by(
                username=session['username'],
                password_hash=old_password_hash).first_or_404()

            password = request.form['password']  # 변경할 비밀번호
            password2 = request.form[
                'password2']  # 변경할 비밀번호를 확인하기 위한 두 번째 비밀번호
            if password != password2:
                # 변경할 두개의 비밀번호가 맞지 않을 경우
                flash('변경하실 비밀번호와 비밀번호 확인 값이 맞지 않습니다. 다시 입력해주세요.')
                return redirect(url_for('.change_pw'))

            # 두개의 비밀번호가 맞는 경우
            password_hash = db.session.query(func.sha2(password,
                                                       224))  # 비밀번호 해쉬
            user.password_hash = password_hash  # 비밀번호 변경
            db.session.commit()
            flash('비밀번호 변경이 성공했습니다.')
            return redirect(url_for('.index', username=session['username']))

        return render_template('change_password.html')
    else:
        flash('로그인이 되어있지 않아 비밀번호 변경을 못 합니다. 로그인을 해주세요.')
        return redirect(url_for('auth.login'))
Esempio n. 2
0
def reset_password():
    if 'username' in session and not 'id' in session: # reset 뷰함수에서 저장된 session이 존재하는지 확인하는 조건문 단 id가 저장되어있으면 안된다. id가 저장이 되어있으면 로그인이 되어있다는 의미이다.
        if request.method == 'POST':
            # POST일 경우(submit을 했을 경우)
            password = request.form['password'] # Client에서 입력한 password 값을 저장하는 변수
            password2 = request.form['password2'] # Client에서 입력한 password 확인 값을 저장하는 변수
            if password != password2:
                # 두 입력 값이 같지 않을 경우
                flash('비밀번호가 같지 않습니다.')
                return redirect(url_for('.reset_password'))

            # 비밀번호를 변경하기.
            password_hash = db.session.query(func.sha2(password, 224)) # 비밀번호 해쉬
            user = User.query.filter_by(username = session['username']).first()
            user.password_hash = password_hash
            db.session.commit()
            session.pop('username', None) # 변경이 완료(update 쿼리가 끝)되면 저장된 session을 제거(pop) 한 후에 로그인 페이지로 리다이렉트한다.password)
            flash('비밀번호 변경이 성공했습니다.')
            return redirect(url_for('.login'))
     
        # method가 post가 아닐시 대표: GET
        return render_template('reset_password.html')
    else:
        flash('문제 발생')
        return redirect(url_for('.login'))
Esempio n. 3
0
def login():
    if not 'username' in session and not 'id' in session: # 로그인이 안 되어있는 상태를 확인 하는 조건문
        if request.method == 'POST': # method가 POST인 경우(로그인을 하기위해 로그인 submit 버튼을 클릭 했을 때 발생하는 method)
            email = request.form['email'] # Client에서 입력한 email 값을 저장하는 변수
            password = request.form['password'] # Client에서 입력한 password 값을 저장하는 변수
            try:
                password_hash = db.session.query(func.sha2(password, 224)) # 입력한 비밀번호 해쉬하기.
                user = User.query.filter_by(email = email, password_hash = password_hash).first()
                if not user:
                    # 워 검색한 user가 존재하지 않을 경우
                    flash('존재하지 않는 아이디이거나 비밀번호가 맞지 않습니다.')
                    return redirect(url_for('.login'))
                session['username'] = user.username
                session['id'] = user.id
            except Exception as e: # 예상치 못 한 Error가 발생할 시 처리하는 except 문
                flash(str(e) + '라는 문제가 발생했습니다.')
                abort(500)

            flash('로그인을 성공했습니다.')
            return redirect(url_for('main.index', username = session['username']))

        # method가 POST가 아닌 경우(대표 method GET)
        return render_template('login.html')
    else: # 로그인 되어있는 상태에서 로그인 페이지로 들어갈시(강제적으로) 메인 페이지로 리다이렉트 하는 조건문(else 문)
        flash('예상치 못한 문제로 로그아웃 합니다.')
        session.pop('username', None)
        session.pop('id', None)
        return redirect(url_for('.login'))
Esempio n. 4
0
def reset():
    # 비밀번호 변경 뷰함수
    if 'id' in session:
        if request.method == 'POST':
            # 비밀번호 변경
            user = User.query.filter_by(id = session['id']).first()
            password_hash = db.session.query(func.sha2(request.form['pw'], 224))
            user.password_hash = password_hash
            db.session.commit()
            flash('비밀번호 변경했습니다.')

            if 'url' in session:
                # 이전 url이 /search인 경우
                if session['url'] == 'search':
                    # /search에서 넘어온 경우
                    session.pop('id', None)
                    session.pop('url', None)

                    return redirect(url_for('.login'))

                if session['url'] == 'check':
                    # /check에서 넘어온 경우
                    session.pop('url', None)

                    return redirect(url_for('.profile'))

        return render_template('main/reset_password.html')
    else:
        flash('로그인이 되어있지 않거나, 해당 접근 방식으로는 비밀번호 변경이 불가능합니다.')
        return redirect(url_for('.index'))
Esempio n. 5
0
def check():
    # 현재 비밀번호를 확인하는 뷰함수
    if request.method == 'POST':
        current_password = request.form['currentPw']
        current_password_hash = db.session.query(func.sha2(current_password,224))
        user = User.query.filter_by(id = session['id'], password_hash = current_password_hash).first()
        if not user:
            flash('입력하신 비밀번호는 현재 비밀번호와 맞지 않습니다.')
            return redirect(url_for('.check'))

        session['url'] = 'check'

        return redirect(url_for('.reset'))
    return render_template('main/check_old_password.html')
Esempio n. 6
0
def login():
    # 로그인 뷰함수
    if request.method == 'POST':
        id = request.form['id']
        pw = request.form['pw']
        password_hash = db.session.query(func.sha2(pw, 224))
        user = User.query.filter_by(user_id = id, password_hash = password_hash).first()

        if not user:
            flash('존재하지 않는 아이디거나, 비밀번호가 옳바르지 않습니다.')
            return redirect(url_for('.login'))

        session['id'] = user.id

        return redirect(url_for('.index'))

    return render_template('main/login.html')
Esempio n. 7
0
def register():
    if  not'username' in session and not 'id' in session: # 로그인이 되어있지 않는 상태를 확인하는 조건문
        if request.method == 'POST': # method가 POST인지 확인하는 조건문
            email = request.form['email'] # Clinet에서 입력한 email 값을 저장하는 변수
            username = request.form['username'] # Clinet에서 입력한 username 값을 저장하는 변수
            password = request.form['password'] # Client에서 입력한 password 값을 저장하는 변수
            password2 = request.form['password2'] # Client에서 입력한 password 확인 값을 저장하는 변수
            
            # 이메일 닉네임 비밀번호가 존재하지 않는 경우 회원가입 페이지로 리다이렉트 하는 기능.
            if not bool(username.strip()) or not bool(email.strip()) or not bool(password.strip()) or \
               not bool(password2.strip()) or password != password2:
                flash('email or username 작성에서 잘 못 되었거나 비밀번호와 비밀번호 확인이 일치하지 않습니다.')
                return redirect(url_for('.register'))

            # 회원가입 절차.
            selected_email = User.query.filter_by(email = email).first()
            if selected_email:
                flash('존재하는 이메일 입니다.')
                return redirect(url_for('.register'))

            selected_username = User.query.filter_by(username = username).first()
            if selected_username:
                flash('존재하는 닉네임 입니다.')
                return redirect(url_for('.register'))

            # 회원가입하여 users 테이블에 입력한 데이터를 insert하고 해당 id value에 맞게 게시글 작성에 대한 폴더 생성하기.
            password_hash = db.session.query(func.sha2(password, 224))
            user = User(email = email, username = username, password_hash = password_hash)
            db.session.add(user)
            db.session.commit()
            os.mkdir('app/templates/postFiles/' + str(user.id))

            flash('가입완료 됬습니다.')
            return redirect(url_for('.login'))
        # method가 POST가 아닐 경우
        return render_template('register.html')
    else: # 로그인이 되어있는 상태면 저장된 session을 제거(pop)한 후에 메인페이지로 리다이렉트 한다.
        session.pop('username', None)
        session.pop('id', None)
        flash('예상치 못한 문제로 로그아웃 합니다.')
        return redirect(url_for('.login'))
Esempio n. 8
0
def register():
    # 회원가입 뷰함수
    if request.method == "POST":
        # ajax 통신을 할 경우(http method == post)
        data = request.get_json()

        if 'id' in data:
            # id 중복체크
            user = User.query.filter_by(user_id = data['id']).first()

            if user:
                return jsonify(data = False)
            else:
                return jsonify(data = True)

        elif 'userName' in data:
            # 닉네임 중복체크
            user = User.query.filter_by(username = data['userName']).first()

            if user:
                return jsonify(data = False)
            else:
                return jsonify(data = True)

        elif 'form' in data:
            # 회원가입 submit
            try:
                password_hash = db.session.query(func.sha2(data["form"]["password"], 224))
                user = User(user_id = data['form']['id'], username = data["form"]["username"], password_hash = password_hash)
                db.session.add(user)
                db.session.commit()
                os.mkdir(os.path.join(current_app.config['PROFILE_PATH'], user.user_id))
            except Exception as e:
                return jsonify(data = False, msg = e)

            return jsonify(data = True)

    return render_template('main/register.html')