-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathauth.py
38 lines (31 loc) · 1.5 KB
/
auth.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from flask import Blueprint, request, jsonify
from models import db, User
from werkzeug.security import generate_password_hash, check_password_hash
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity
auth = Blueprint('auth', __name__)
@auth.route('/register', methods=['POST'])
def register():
data = request.get_json()
hashed_password = generate_password_hash(data['password'])
# Check if username is already taken
existing_user = User.query.filter_by(username=data['username']).first()
if existing_user:
return jsonify({'message': 'Registration failed. Username already taken.'}), 409
new_user = User(username=data['username'], password=hashed_password, role=data['role'])
db.session.add(new_user)
db.session.commit()
return jsonify({'message': 'Registered successfully'}), 201
@auth.route('/login', methods=['POST'])
def login():
data = request.get_json()
user = User.query.filter_by(username=data['username']).first()
if not user or not check_password_hash(user.password, data['password']):
return jsonify({'message': 'Login Unsuccessful'}), 401
access_token = create_access_token(identity=user.username)
return jsonify({'message': 'Login successful', 'access_token': access_token}), 200
@auth.route('/profile', methods=['GET'])
@jwt_required()
def profile():
current_user = get_jwt_identity()
user = User.query.filter_by(username=current_user).first()
return jsonify(username=user.username, role=user.role), 200