๐Ÿ“’ [ TIL ] 2022.05.24_26์ผ์ฐจ # ์‚ฌ๋ฌผ์ธ์‹ ๋จธ์‹ ๋Ÿฌ๋‹(5)

๋ฌธ๋ช…์ฃผยท2022๋…„ 5์›” 24์ผ
1
post-thumbnail

[ 2022-05-24 (ํ™”) ์˜ค๋Š˜์˜ TIL ]

[ Today Project ]

  • ์‚ฌ๋ฌผ์ธ์‹ ๋จธ์‹ ๋Ÿฌ๋‹
    : ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ํŒ€ํ”„๋กœ์ ํŠธ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

[ Today Learn ]

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๋นจ๋ฆฌ ๋๋‚ด๊ฒŒ๋˜์–ด ๊ฑฐ๋ถ์ด๋ฐ˜๐Ÿข ๋ณต์Šต์ง„ํ–‰(์ดํ‹€์— ๊ฑธ์ณ ์ง„ํ–‰์˜ˆ์ •)

โœ๏ธ ๋‚ด๊ฐ€ ๋ฐฐ์šด๊ฒƒ, ์–ป์€ ๊ฒƒ

  • jwt ํ† ํฐ encode/decode ํ• ๋•Œ์˜ ์ฐจ์ด์ 
    jwtํ† ํฐ์„ encodeํ• ๋•Œ๋Š” algorithm์ด ํ•œ๊ฐœ๋กœ ํ˜•์„ฑ๋˜๋ฉฐ ๋”ฐ๋ผ์„œ list๊ฐ€ ์•„๋‹Œ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋Š” ๋ฐ˜๋ฉด,
    decodeํ• ๋•Œ๋Š” algorithm์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋‘˜์ˆ˜ ์žˆ์–ด์„œ list์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค. ์ฆ‰, ์ž๋ฌผ์‡ ๋Š” ํ•œ ๊ฐœ์ธ๋ฐ, ํ‘ธ๋Š”๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ๊ฒƒ์ฒ˜๋Ÿผ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

# encode
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
# decode
user = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
  • json.dumps() ํ™œ์šฉํ•˜์—ฌ dicํ˜•์„ JSON๋ฌธ์ž์—ด๋กœ ์ •ํ˜•ํ™”ํ•˜์—ฌ ์ถœ๋ ฅ
    ์‚ฌ์ „ํ˜•(dictํ˜•)๋ฐ์ดํ„ฐ๋ฅผ JSONํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

article['comments'] = json.loads(dumps(comments))
  • @decorator

โ“decorator ๋ž€?
decorator๋ฅผ ํ•œ๋งˆ๋””๋กœ ์–˜๊ธฐํ•˜์ž๋ฉด,ย ๋Œ€์ƒ ํ•จ์ˆ˜๋ฅผ wrapping ํ•˜๊ณ , ์ด wrapping ๋œ ํ•จ์ˆ˜์˜ ์•ž๋’ค์—ย ์ถ”๊ฐ€์ ์œผ๋กœ ๊พธ๋ฉฐ์งˆ ๊ตฌ๋ฌธ ๋“ค์„ ์ •์˜ํ•ด์„œ ์†์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”์ธ ๊ตฌ๋ฌธ์ด ์žˆ๊ณ , ์—ฌ๊ธฐ์—ย ย ๋ถ€๊ฐ€์ ์ธ ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„๋•Œ ๋˜๋Š” ์ด ๋ถ€๊ฐ€์ ์ธ ๊ตฌ๋ฌธ์„ ๋ฐ˜๋ณตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ๋ถ€๊ฐ€์ ์ธ/๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ decorator ๋กœ ์„ ์–ธํ•ด์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

๐Ÿงฉ ์ ์šฉ์˜ˆ์‹œ

# authorizeํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  
def authorize(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if not 'Authorization' in request.headers:
            abort(401)
        token = request.headers['Authorization']
        try:
            user = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
        except:
            abort(401)
        return f(user, *args, **kwargs)
    return decorated_function

# @authorize๋ฅผ ํ™œ์šฉํ•ด ๋ฐ˜๋ณตํ•จ์ˆ˜๋ฅผ ํ™œ์šฉ
@app.route("/")
@authorize
def hello_world(user):
    print(user)
    return jsonify({'message': 'success'})

๐ŸŒฑ ๋Š๋‚€ ์ 

์–ด์ œ์— ์ด์–ด์„œ ์˜ค๋Š˜๋„ ๊ฑฐ๋ถ์ด๋ฐ˜ ๊ฐ•์˜ ๋ณต์Šต์„ ํ–ˆ๋‹ค.
ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š”๋ฐ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ๋“ค๊ณผ ๋˜ ๊ทธ์— ํ•„์š”ํ•œ ์ˆ˜๋งŽ์€ ๋ณ€์ˆ˜๋“ค์„ ๋งŒ๋“ค๊ณ ๋ณด๋‹ˆ ๋จธ๋ฆฌ๊ฐ€ ์–ด์งˆํ–ˆ๋‹ค. ๋ณ€์ˆ˜๋ช…๊ณผ class๋ช…์ด์ค‘์š”ํ•˜๋‹ค๋Š” ์ด์œ ๋ฅผ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ณ€์ˆ˜๋ช…์„ ๋‚˜ํ˜ผ์ž๋งŒ ์•Œ์ˆ˜์žˆ๊ฒŒ ์ง“๊ธฐ๋„ ์–ด๋ ค์šด๋ฐ ๋‚ด ์ฝ”๋“œ๋ฅผ ๋ณด๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์€ ์ดํ•ด๋ฅผ ์ž˜ ํ• ์ˆ˜์žˆ์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์•ž์œผ๋กœ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ class๋ช… ๋“ฑ์„ ์ž˜ ์ง“๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋„ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค.

๐ŸŽ ์ž์„ธํ•œ ์ฝ”๋“œ๋Š” Moonmoo ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค

profile
ํ•˜๋ฃจ ํ•œ๊ฑธ์Œ์”ฉ ๊พธ์ค€ํžˆ ๋‚˜์•„๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๐Ÿ™†โ€โ™€๏ธ https://github.com/Moonmooj

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 5์›” 24์ผ

์ž˜ ๋ณด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค~~ ์–ธ์ œ ์ด๋ ‡๊ฒŒ ๋งŽ์ด ์“ฐ์…จ๋‚˜์š” ^^

1๊ฐœ์˜ ๋‹ต๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด