initial setting at 20-Aug-2025
This commit is contained in:
72
rog/views_apis/api_auth.py
Executable file
72
rog/views_apis/api_auth.py
Executable file
@ -0,0 +1,72 @@
|
||||
# 既存のインポート部分を変更
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
from rog.models import NewEvent2, Entry # Eventから変更
|
||||
import logging
|
||||
from django.db.models import F, Q
|
||||
from django.conf import settings
|
||||
import os
|
||||
from urllib.parse import urljoin
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
"""
|
||||
これで/check_event_codeエンドポイントがDjangoに実装されました。
|
||||
このエンドポイントは元のRubyコードと同様に、ゼッケン番号とパスワードの認証を行い、
|
||||
正しい場合はイベントコードを返します。
|
||||
|
||||
※注意: パスワード検証部分は、Djangoのcheck_passwordメソッドを使用していますが、
|
||||
元のRubyコードでの検証方法と異なる可能性があります。
|
||||
データベースの実際の構造や認証方法に合わせて調整が必要かもしれません。
|
||||
"""
|
||||
|
||||
@api_view(['GET'])
|
||||
def check_event_code(request):
|
||||
"""
|
||||
ゼッケン番号とパスワードの組み合わせが正しいか確認し、イベントコードを返す
|
||||
パラメータ:
|
||||
- zekken_number: ゼッケン番号
|
||||
- pw: パスワード
|
||||
"""
|
||||
logger.info("check_event_code called")
|
||||
|
||||
zekken_number = request.query_params.get('zekken_number')
|
||||
password = request.query_params.get('pw')
|
||||
|
||||
logger.debug(f"Parameters: zekken_number={zekken_number}, password={'*' * len(password) if password else None}")
|
||||
|
||||
if not zekken_number or not password:
|
||||
logger.warning("Missing required parameters")
|
||||
return Response({"status": "ERROR", "message": "ゼッケン番号とパスワードが必要です"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
try:
|
||||
# ゼッケン番号とパスワードでユーザーを検索
|
||||
entry = Entry.objects.filter(zekken_number=zekken_number).first()
|
||||
|
||||
if not entry:
|
||||
logger.warning(f"No entry found for zekken_number: {zekken_number}")
|
||||
return Response({"status": "ERROR", "message": "ゼッケン番号が見つかりません"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
user = entry.owner
|
||||
|
||||
# パスワード検証
|
||||
if not user.check_password(password):
|
||||
logger.warning(f"Invalid password for zekken_number: {zekken_number}")
|
||||
return Response({"status": "ERROR", "message": "パスワードが正しくありません"}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
# NewEvent2のイベント参照に対応
|
||||
# Entryモデルがnew_event2などの別フィールド名でNewEvent2を参照している場合は変更が必要
|
||||
new_event = NewEvent2.objects.filter(id=entry.event.id).first()
|
||||
event_code = new_event.event_name if new_event else None
|
||||
|
||||
if not event_code:
|
||||
logger.warning(f"No event associated with zekken_number: {zekken_number}")
|
||||
return Response({"status": "ERROR", "message": "イベントが見つかりません"}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
logger.info(f"Authentication successful for zekken_number: {zekken_number}, event_code: {event_code}")
|
||||
return Response({"status": "OK", "event_code": event_code})
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error in check_event_code: {str(e)}")
|
||||
return Response({"status": "ERROR", "message": "サーバーエラーが発生しました"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
Reference in New Issue
Block a user