SOY NV AI commited on
Commit
1cf7ede
ยท
1 Parent(s): a281a37

Fix: Use Flask-Login unauthorized_handler instead of 404 handler for login redirect

Browse files
Files changed (1) hide show
  1. app/__init__.py +18 -8
app/__init__.py CHANGED
@@ -19,6 +19,17 @@ login_manager.login_view = 'main.login'
19
  login_manager.login_message = '๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'
20
  login_manager.login_message_category = 'info'
21
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
  @login_manager.user_loader
24
  def load_user(user_id: str) -> Optional[User]:
@@ -83,7 +94,7 @@ def create_app() -> Flask:
83
  logger.warning(f"favicon.ico ์ฒ˜๋ฆฌ ์‹คํŒจ: {e}")
84
  return '', 204 # No Content
85
 
86
- # 404 ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ
87
  @app.errorhandler(404)
88
  def not_found(error):
89
  """404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ"""
@@ -91,13 +102,12 @@ def create_app() -> Flask:
91
  # API ์š”์ฒญ์ธ ๊ฒฝ์šฐ JSON ์‘๋‹ต
92
  if request.path.startswith('/api/'):
93
  return jsonify({'error': '๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', 'path': request.path}), 404
94
- # ์ผ๋ฐ˜ ์š”์ฒญ์ธ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ (๋กœ๊ทธ์ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ)
95
- from flask import redirect, url_for
96
- from flask_login import current_user
97
- if not current_user.is_authenticated:
98
- return redirect(url_for('main.login', next=request.path))
99
- # ๋กœ๊ทธ์ธ๋œ ๊ฒฝ์šฐ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
100
- return redirect(url_for('main.index'))
101
 
102
  # ์š”์ฒญ ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€
103
  @app.before_request
 
19
  login_manager.login_message = '๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'
20
  login_manager.login_message_category = 'info'
21
 
22
+ @login_manager.unauthorized_handler
23
+ def unauthorized():
24
+ """์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž ์ฒ˜๋ฆฌ"""
25
+ from flask import redirect, url_for, request
26
+ # API ์š”์ฒญ์ธ ๊ฒฝ์šฐ JSON ์‘๋‹ต
27
+ if request.path.startswith('/api/'):
28
+ from flask import jsonify
29
+ return jsonify({'error': '๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'}), 401
30
+ # ์ผ๋ฐ˜ ์š”์ฒญ์ธ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
31
+ return redirect(url_for('main.login', next=request.path))
32
+
33
 
34
  @login_manager.user_loader
35
  def load_user(user_id: str) -> Optional[User]:
 
94
  logger.warning(f"favicon.ico ์ฒ˜๋ฆฌ ์‹คํŒจ: {e}")
95
  return '', 204 # No Content
96
 
97
+ # 404 ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ (์‹ค์ œ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ผ์šฐํŠธ์—๋งŒ ์ ์šฉ)
98
  @app.errorhandler(404)
99
  def not_found(error):
100
  """404 ์—๋Ÿฌ ์ฒ˜๋ฆฌ"""
 
102
  # API ์š”์ฒญ์ธ ๊ฒฝ์šฐ JSON ์‘๋‹ต
103
  if request.path.startswith('/api/'):
104
  return jsonify({'error': '๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', 'path': request.path}), 404
105
+ # ์ •์  ํŒŒ์ผ ์š”์ฒญ์ธ ๊ฒฝ์šฐ 404 ๋ฐ˜ํ™˜
106
+ if request.path.startswith('/static/'):
107
+ return '', 404
108
+ # ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋Š” 404๊ฐ€ ์•„๋‹Œ ์ •์ƒ ๋ผ์šฐํŠธ์ด๋ฏ€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜์ง€ ์•Š์Œ
109
+ # Flask-Login์ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ
110
+ return jsonify({'error': 'ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.', 'path': request.path}), 404
 
111
 
112
  # ์š”์ฒญ ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด ์ถ”๊ฐ€
113
  @app.before_request