Interview question
How do you implement authentication and authorization? Authentication और authorization कैसे implement करते हैं?
Answer
# Django authentication
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
def register(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = User.objects.create_user(username=username, password=password)
return redirect('login')
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
def logout_view(request):
logout(request)
return redirect('login')
@login_required(login_url='login')
def dashboard(request):
return render(request, 'dashboard.html')
# Flask authentication with Flask-Login
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
@app.route('/login', methods=['POST'])
def login():
data = request.json
user = User.query.filter_by(username=data['username']).first()
if user and check_password_hash(user.password, data['password']):
login_user(user)
return jsonify({'status': 'logged in'})
@app.route('/dashboard')
@login_required
def dashboard():
return jsonify({'user': current_user.username})
# FastAPI JWT authentication
from fastapi import Depends, HTTPException
from fastapi.security import HTTPBearer, HTTPAuthCredentials
from jose import JWTError, jwt
security = HTTPBearer()
def verify_token(credentials: HTTPAuthCredentials = Depends(security)):
token = credentials.credentials
try:
payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
return payload
except JWTError:
raise HTTPException(status_code=401, detail='Invalid token')
@app.get('/protected')
async def protected(payload = Depends(verify_token)):
return {'user': payload}Django:
User.objects.create_user(username, password)
authenticate(request, username, password)
login(request, user)
logout(request)
@login_required decorator
Flask:
Flask-Login extension
login_user(user)
logout_user()
current_user
FastAPI:
JWT tokens
HTTPBearer security
Dependencies for authenticationWas this answer clear?