🔥 TIL - Day 21
5606 ワード
📌 認証...追加...
1つ目のプロジェクトでは時間が長くないため、認証を考慮せず、目標機能の実現だけを重視しています.2つ目のプロジェクトが開始され、認証ロジックが実装され、既存の機能に認証を追加する必要があります.
今日の目標は認証に関する話題は以下の通りです.
JWT 토큰
方式の認証を使用しており、トークンはクッキーに入れて管理されている状態です.したがって、要求に対するサーバの権限を検証するには、Cookieを確認する必要があります.パラメータはクッキーのtokenに渡されます.伝達されるトークンのペイロード部分が必要であるため、
decode
が実行され、ペイロードのuser_id
がuser_id
であるかどうかを検証することによってトークンが検証される.トークン検証ロジックは後で再考されます.(仮!!)# 토큰 검증 메서드
def verify_token(mytoken):
# 인코딩된 토큰의 payload 부분 디코딩
token = jwt.decode(mytoken, jwt_secret, algorithms=['HS256'])
# 디코딩된 payload의 user_id가 users DB에 있는지 확인
user = db.users.find_one({'user_id': token['user_id']}, {'_id': False})
return user
要求事項を整理する.DB(컬렉션)
がuser_id
を持っていれば、すべてが解決されます.今思えば当たり前だが、時間がかかった.論理を一つ一つ検証しましょう.
1.自分が追加したお気に入りしか見えません.
즐겨찾기 조회 API
が呼び出されると、トークンを検証するために、Cookieは最終的にuser_id
を取り出す.このようにして出されたuser_id
を条件として즐겨찾기 컬렉션
に問い合わせる.즐겨찾기 컬렉션
は登録時にuser_id
を持っているので、自分が追加したお気に入りを検索するしかありません.2.お気に入りを削除できるのは、お気に入りを追加したクライアントのみです.
즐겨찾기 삭제 API
が呼び出されると、トークン検証により得られたuser_id
と、削除するお気に入りとして登録されている법안의 ID
とを条件として、delete_one
の方法でお気に入りを削除する.3.お気に入りが追加されたクライアントを知る必要があります.
즐겨찾기 추가 API
が呼び出されると、トークン検証によって得られたuser_id
が즐겨찾기 컬렉션
のDocument
に追加される.これはあまり難しくない問題ですが、熟考するのではなく、符号化から、長い時間がかかりました.論理を実現するには、まず大きな図を描いてから始めなければならない.
📌 mongoDB update $push, $unset
これは、お気に入りAPIに認証を追加実施した際に知った
mongoDB
関連技術である.お気に入りを追加する場合は、登録した
법안의 ID
をuser collectionに追加する必要があるので、実現したいときに実現しにくいところがあります.{
...,
bookmarks: [
bookmark_id1, bookmark_id2
],
...
}
上記形式でDocumentを構成する場合、bookmars
の値はリスト([]
)形式であり、リストに値を追加する場合はどうすればよいか.私が見つけた答えは
$push
です.bookmarks
リストのlaw_id
とappend
と同じです.db.users.update (
{'조건key':'조건value'},
{'$push':{'bookmarks':law_id}}
)
2つ目のケースは逆で、bookmarks
リストから値を削除します.答えは
$unset
です.bookmarks
リストからlaw_id
が削除されたのと同じです.db.users.update(
{'조건key':'조건value'},
{'$unset': {'bookmark_id':law_id}}
)
mongoDB
についてはまだよく知られていないので、Document
のデザインが正しいかどうかは分かりません.しかし、NoSQLであり、まだ開発段階なので随時変更可能です.Reference
この問題について(🔥 TIL - Day 21), 我々は、より多くの情報をここで見つけました https://velog.io/@dhk22/TIL-Day-21テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol