IL(#4) - 03.04
スモールプロジェクト期間の最終日には、APIの実装が終了してから約21時間エンコードされ、AWSサーバの導入とプロジェクトの説明を準備した.
スモールプロジェクトリンク
ログインおよびコスト入金の実装プロセス(JWT)
JWTとは?
クライアントのセッションステータスを格納するのではなく、サーバとクライアントの間で必要な情報を伝達するトークンベースの認証方法.
長所は?
WTは既存のセッションに情報を格納し、Cookieをセッションで交換し、JMTはユーザの情報をトークンに入れてユーザに送信し、サーバの拡張とメンテナンスに有利である.
タグ生成コードの例
# 로그인
username_receive = request.form['username_give']
password_receive = request.form['password_give']
pw_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
result = db.users.find_one({'username': username_receive, 'password': pw_hash})
if result is not None:
payload = {
'id': username_receive,
'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24) # 로그인 24시간 유지
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return jsonify({'result': 'success', 'token': token})
# 찾지 못하면
else:
return jsonify({'result': 'fail', 'msg': '아이디/비밀번호가 일치하지 않습니다.'})
ログイン時にトークンのCookieを使用して情報を交換します.#저장 API
@app.route('/api/save', methods = ['POST'])
def save_trip():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms = ['HS256'])
myRegion_info = request.form['region_give'];
myPlaceName_info = request.form['placeName_give'];
myPlaceAddress_info = request.form['placeAddress_give'];
myPlaceUrl_info = request.form['placeUrl_give'];
myPlaceImg_info = request.form['placeImg_give'];
myAccommodationName_info = request.form['accommodationName_give'];
myAccommodationAddress_info = request.form['accommodationAddress_give'];
myAccommodationUrl_info = request.form['accommodationUrl_give'];
username = payload['id']
doc = {
'username': username,
'region': myRegion_info,
'place_name': myPlaceName_info,
'place_address': myPlaceAddress_info,
'place_url': myPlaceUrl_info,
'place_img': myPlaceImg_info,
'accommodation_name': myAccommodationName_info,
'accommodation_address': myAccommodationAddress_info,
'accommodation_url': myAccommodationUrl_info,
}
print(doc)
db.myTrip.insert_one(doc)
return jsonify({'msg': '저장완료!'})
except(jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
return redirect(url_for('home'))
サーバ側レンダリングサーバ側レンダリングは、JavaScriptヘルプなしで直接サーバ上でviewを生成するため、クライアントの初期ロード速度が速い.
また、検索エンジンの最適化(SEO,Search Engine Optimization)に有利であり、このサイトを検索エンジンによく表示させる.
文字列MongoDB Object ID
モンゴディー比に格納されているObject IDを文字列化する必要があります.DBからJavaScriptに降格した場合、String形式ではなくロードできません.
def mypage_listing():
token_receive = request.cookies.get('mytoken')
try:
payload = jwt.decode(token_receive, SECRET_KEY, algorithms = ['HS256'])
user_info = list(db.myTrip.find({'username': payload['id']}))
for data in user_info:
data['_id'] = str(data['_id'])
return jsonify({'mypage_data': user_info})
except (jwt.ExpiredSignatureError, jwt.exceptions.DecodeError):
return redirect(url_for('home'))
Reference
この問題について(IL(#4) - 03.04), 我々は、より多くの情報をここで見つけました https://velog.io/@moony_moon/TIL4-03.04テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol