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'))
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'))
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'))
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'))
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')
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')
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'))
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')