# Login.py

Login.py is a simple library for Flask that makes you able to handle login easily without getting plenty of useless lines of code.

## Installation

SOON

## Usage

You can find the full demo of login.py [here](./login-ex.py). You can also find the source code of login.py [here](./login.py).

### initLogin(app, db)

This function is used to create the `User` class. Having this function is necessary for the rest of the program. Without this, the Users cannot get stored into the database.

```python
from flask import Flask, request
from flask_login import UserMixin
from flask_sqlalchemy import SQLAlchemy
from login import *

# Create the "app" and "db" variables
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SECRET_KEY'] = 'aghzi vnguierhtrutizo hard to guess indeeed'
db = SQLAlchemy(app)

# Create the User class and add it to the database
User = initLogin(app, db)
db.create_all()
```

### createUser(username, password, db, User)

This function is used to sign up a new user into the database. This is an example of usage:

```python
@app.route('/register/post', methods=['POST'])
def register():
    try:
        createUser(request.form['username'], request.form['password'], db, User)
        return "New user created you are now logged in as " + current_user.username
    except: 
    		return "This username is already taken"
```

### loginUser(username, password, User)

This function is used to login a user, that means that the user must already be in the database.

```python
@app.route('/login/post', methods=['POST'])
def login():
    try:
        loginUser(request.form['username'], request.form['password'], User)
        return "You are now logged in as " + current_user.username
    except: 
    		return "Invalid username or password"
```


### logout_user()

This is not a function from login.py, but a function from flask_login. The usage of this function is very simple:

```python
@app.route('/logout')
def logout(): 
    logout_user()
    return "You are now logged out."
```

### @login_required

When you add this line under a url route, it locks the page to the logged in users. The users that are not logged will have a `Unauthorized` error showing up.

```python

@app.route('/locked')
@login_required # Using login_required to make a page private
def locked(): 
	return "Hello " + current_user.username + " welcome to your private page."
```