async def register(request): """ Validate form, register and authenticate user """ data = await request.form() form = RegistrationForm(data) username = form.username.data email = form.email.data password = form.password.data if request.method == "POST" and form.validate(): if (await User.exists().where(User.email == email).run() or await User.exists().where(User.username == username).run()): user_error = "User with that email or username already exists." return templates.TemplateResponse( "accounts/register.html", { "request": request, "form": form, "user_error": user_error, }, ) query = User( username=username, email=email, password=password, ) await query.save().run() results = await (User.select().columns( User.id, User.username, User.password).where( (User.username == username)).first()).run() valid_user = await User.login(username=username, password=password) if not valid_user: user_error = "Invalid username or password" return templates.TemplateResponse( "accounts/login.html", { "request": request, "form": form, "user_error": user_error, }, ) response = RedirectResponse(BASE_HOST, status_code=302) response.set_cookie("jwt", generate_jwt(results["username"]), httponly=True) return response return templates.TemplateResponse("accounts/register.html", { "request": request, "form": form })
async def register(request): """ Validate form, register and authenticate user with JWT token """ results = await User.all() data = await request.form() form = RegistrationForm(data) username = form.username.data email = form.email.data password = form.password.data if request.method == "POST" and form.validate(): for result in results: if email == result.email or username == result.username: user_error = "User with that email or username already exists." return templates.TemplateResponse( "accounts/register.html", { "request": request, "form": form, "user_error": user_error }, ) query = User( username=username, email=email, joined=datetime.datetime.now(), last_login=datetime.datetime.now(), login_count=1, password=hash_password(password), ) await query.save() user_query = await User.get( username=username) hashed_password = user_query.password valid_password = check_password(password, hashed_password) response = RedirectResponse(url="/", status_code=302) if valid_password: response.set_cookie( "jwt", generate_jwt(user_query.username), httponly=True ) response.set_cookie( "admin", ADMIN, httponly=True ) return response return templates.TemplateResponse( "accounts/register.html", { "request": request, "form": form } )
async def register(request): """ Validate form, register and authenticate user with JWT token """ query = users.select().order_by(users.c.id.desc()) results = await database.fetch_all(query=query) data = await request.form() form = RegistrationForm(data) username = form.username.data email = form.email.data password = form.password.data if request.method == "POST" and form.validate(): for result in results: if email == result["email"] or username == result["username"]: user_error = "User with that email or username already exists." return templates.TemplateResponse( "accounts/register.html", { "request": request, "form": form, "user_error": user_error }, ) query = users.insert().values( username=username, email=email, joined=datetime.datetime.now(), last_login=datetime.datetime.now(), login_count=1, password=hash_password(password), ) await database.execute(query) user_query = users.select().where(users.c.username == username) user_results = await database.fetch_one(user_query) hashed_password = user_results["password"] valid_password = check_password(password, hashed_password) request.session["user"] = user_results["username"].capitalize() response = RedirectResponse(url="/", status_code=302) if valid_password: response.set_cookie("jwt", generate_jwt(user_results["username"]), httponly=True) response.set_cookie("admin", ADMIN, httponly=True) return response return templates.TemplateResponse("accounts/register.html", { "request": request, "form": form })