示例#1
0
async def login(request):
    """
    Validate form, login and authenticate user with JWT token
    """
    path = request.query_params['next']
    data = await request.form()
    form = LoginForm(data)
    username = form.username.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        try:
            results = await User.get(
                username=username)
            hashed_password = results.password
            valid_password = check_password(password, hashed_password)
            if not valid_password:
                user_error = "Invalid username or password"
                return templates.TemplateResponse(
                    "accounts/login.html",
                    {
                        "request": request,
                        "form": form,
                        "user_error": user_error
                    },
                )
            # update login counter and login time
            results.login_count += 1
            results.last_login = datetime.datetime.now()
            await results.save()
            response = RedirectResponse(BASE_HOST + path, status_code=302)
            response.set_cookie(
                "jwt", generate_jwt(results.username), httponly=True
            )
            response.set_cookie(
                "admin", ADMIN, httponly=True
            )
            return response
        except:  # noqa
            user_error = "Please register you don't have account"
            return templates.TemplateResponse(
                "accounts/login.html",
                {
                    "request": request,
                    "form": form,
                    "user_error": user_error,
                },
            )
    return templates.TemplateResponse("accounts/login.html", {
        "request": request,
        "form": form,
        "path": path
    })
示例#2
0
async def login(request):
    """
    Validate form, login and authenticate user with JWT token
    """
    data = await request.form()
    form = LoginForm(data)
    username = form.username.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        try:
            query = users.select().where(users.c.username == username)
            results = await database.fetch_one(query)
            hashed_password = results["password"]
            valid_password = check_password(password, hashed_password)
            if not valid_password:
                user_error = "Invalid username or password"
                return templates.TemplateResponse(
                    "accounts/login.html",
                    {
                        "request": request,
                        "form": form,
                        "user_error": user_error
                    },
                )
            request.session["user"] = results["username"].capitalize()
            # update login counter and login time
            update_query = users.update(users.c.username == username).values(
                login_count=users.c.login_count + 1,
                last_login=datetime.datetime.now())
            await database.execute(update_query)
            response = RedirectResponse(url="/", status_code=302)
            response.set_cookie("jwt",
                                generate_jwt(results["username"]),
                                httponly=True)
            response.set_cookie("admin", ADMIN, httponly=True)
            return response
        except TypeError:
            user_error = "Please register you don't have account"
            return templates.TemplateResponse(
                "accounts/login.html",
                {
                    "request": request,
                    "form": form,
                    "user_error": user_error
                },
            )
    return templates.TemplateResponse("accounts/login.html", {
        "request": request,
        "form": form
    })
示例#3
0
async def login(request):
    """
    Validate form, login and authenticate user
    """
    path = request.query_params["next"]
    data = await request.form()
    form = LoginForm(data)
    username = form.username.data
    password = form.password.data
    if request.method == "POST" and form.validate():
        if await User.exists().where(User.username == username).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 + path, status_code=302)
            response.set_cookie("jwt",
                                generate_jwt(results["username"]),
                                httponly=True)
            return response
        else:
            user_error = "Please register you don't have account"
            return templates.TemplateResponse(
                "accounts/login.html",
                {
                    "request": request,
                    "form": form,
                    "user_error": user_error,
                },
            )

    return templates.TemplateResponse("accounts/login.html", {
        "request": request,
        "form": form
    })