tuanhcmute / Nhom1_CCPTPM

3 stars 0 forks source link

Hoàn thành thực hiện chức năng đăng ký tài khoản #31

Closed tuanhcmute closed 1 year ago

tuanhcmute commented 1 year ago

Hoàn thành thực hiện chức năng đăng ký tài khoản #31

1. Đoạn code chính thực hiện chức năng đăng ký tài khoản


@bp.route('/signup', methods=[Method.POST])
def SignUp():
  message_signup = check_user_data_signup()
  if (message_signup != 'Success'):
    error = message_signup
    session['message_signup'] = error
    return redirect(request.referrer)

  try:
      #get_data
      username = request.form.get('username')
      password = request.form.get('password')
      fullname = request.form.get('fullname')
      address = request.form.get('address')
      age = request.form.get('age')
      role = int(request.form.get('user_type'))

      #Check Strong password
      check_pass= check_password(password)
      if(check_pass != 'Success'):
        error = check_pass
        session['message_signup'] = error
        return redirect(request.referrer)

      #hash Password
      app = Flask(__name__)
      csrf = CSRFProtect(app)
      BcryptPass = Bcrypt(app)
      hashed_password = BcryptPass.generate_password_hash(password).decode('utf-8')

      #create user
      user = User(role, username, hashed_password, age, fullname, address, isEnable=True)
      db.session.add_all([user])
      db.session.commit()

      session.pop('message_signup', None)

      return render_template('signup.html', check='true')
  except Exception as e:
      print('An error occurred while querying the database:', str(e))
      error = 'Error'
      session['message_signup'] = error
      return redirect(request.referrer)

# Clear session
@bp.route('/form_login')
def clear_session_login():
  if 'message_signup' in session:
    session.pop('message_signup', None)
  return redirect(url_for('authen.loginPost'))

@bp.route('/form_signup')
def clear_session_signup():
  if 'message' in session:
    session.pop('message', None)
  return redirect(url_for('authen.SignUp'))

@bp.route('/clear_session')
def clear_session():
  session.clear()
  return 'Session cleared'

# Check Data
def check_user_data_signup():
  # Lấy giá trị từ các trường của form
  username = request.form.get('username')
  password = request.form.get('password')
  fullname = request.form.get('fullname')
  address = request.form.get('address')
  age = request.form.get('age')
  # Kiểm tra xem các trường này có được điền đầy đủ hay không
  if not username:
      return 'Vui lòng nhập tên đăng nhập'
  if not password:
      return 'Vui lòng nhập mật khẩu'
  if not fullname:
      return 'Vui lòng nhập tên'
  if not age:
      return 'Vui lòng nhập tuổi'
  if not address:
      return 'Vui lòng nhập địa chỉ'

  # Kiểm tra username có tồn tại hay không
  user = User.query.filter_by(username=username).first()
  if user is not None:
    return 'Username đã tồn tại'

  return 'Success'

2. Giải thích code

mytranchi commented 1 year ago

Hoàn thành chức năng signup


@bp.route('/signup', methods=[Method.GET])
def getSignUpForm():
return render_template('signup.html')

@bp.route('/signup', methods=[Method.POST]) def SignUp(): message_signup = check_user_data_signup() if (message_signup != 'Success'): error = message_signup session['message_signup'] = error return redirect(request.referrer)

try:

get_data

  username = request.form.get('username')
  password = request.form.get('password')
  fullname = request.form.get('fullname')
  address = request.form.get('address')
  age = request.form.get('age')
  role = int(request.form.get('user_type'))

  #Check Strong password
  check_pass= check_password(password)
  if(check_pass != 'Success'):
    error = check_pass
    session['message_signup'] = error
    return redirect(request.referrer)

  #hash Password
  app = Flask(__name__)
  csrf = CSRFProtect(app)
  BcryptPass = Bcrypt(app)
  hashed_password = BcryptPass.generate_password_hash(password).decode('utf-8')

  #create user
  user = User(role, username, hashed_password, age, fullname, address, isEnable=True)
  db.session.add_all([user])
  db.session.commit()

  session.pop('message_signup', None)

  return render_template('signup.html', check='true')

except Exception as e: print('An error occurred while querying the database:', str(e)) error = 'Error' session['message_signup'] = error return redirect(request.referrer)

def check_user_data_signup():

Lấy giá trị từ các trường của form

username = request.form.get('username') password = request.form.get('password') fullname = request.form.get('fullname') address = request.form.get('address') age = request.form.get('age')

Kiểm tra xem các trường này có được điền đầy đủ hay không

if not username: return 'Vui lòng nhập tên đăng nhập' if not password: return 'Vui lòng nhập mật khẩu' if not fullname: return 'Vui lòng nhập tên' if not age: return 'Vui lòng nhập tuổi' if not address: return 'Vui lòng nhập địa chỉ'

Kiểm tra username có tồn tại hay không

user = User.query.filter_by(username=username).first() if user is not None: return 'Username đã tồn tại' return 'Success'

Clear session

@bp.route('/form_login') def clear_session_login(): if 'message_signup' in session: session.pop('message_signup', None) return redirect(url_for('authen.loginPost'))

Check Strong pass

def check_password(password):

Kiểm tra độ dài mật khẩu

if len(password) < 6 or len(password) > 8:
  return 'Mật khẩu phải từ 6 đến 8 ký tự'
# Kiểm tra các ký tự trong mật khẩu
if not re.search(r'\d', password):
  return'Mật khẩu phải chứa ít nhất một số'
if not re.search(r'[A-Z]', password):
  return 'Mật khẩu phải chứa ít nhất một chữ hoa'
if not re.search(r'[a-z]', password):
  return 'Mật khẩu phải chứa ít nhất một chữ thường'
# Nếu mật khẩu thỏa mãn tất cả các yêu cầu
return 'Success'

- Trong đoạn code chức năng login trên: 
+Thực hiện kiểm tra đầu vào và check strong password cũng như là user có tồn tại hay không.
+Xuất các thông báo khi người dùng điền thông tin còn thiếu.
+Xóa các cookies hiển thị error khi người dùng chuyển sang trang login