passport-jwt
を使っています。
正確には、Nestjs にて @nestjs/passport
と併せて使っています。
ユーザ登録〜ログインと、ログイン時に発行する JWT アクセストークンを使ったユーザ認証の実装をして、
これは期待どおり動作しています。
しかし要件として、
リクエストがアクセストークンを持っていなくても弾かずに、未ログインユーザとしてアクセスを通したいと思います。
ユースケースとしてはたとえば、
ログインしていなくても「商品」データにアクセスできるが、ログインした上で「商品」データを見たら自分が過去に購入したかどうかまで取れる、
または、ログインしていなくても「商品」に付いたいいね数を見れるが、ログインした上でなら自分がいいね済かどうかまで取れる、など。
ユーザ認証でアクセスを弾きたいわけでなく、ユーザIDを「取れるなら取りたい」くらいの緩い認証をしたい場面はよくあると思います。
リクエスト時の流れを追ってみましたが、
passport-jwt
を使うとどうやら、リクエストが「JWT アクセストークンとして有効な文字列」をまず持っている状態でなければ、実際の認証(DB から User を抽出するような実際的な部分)に到達する以前に、問答無用で弾く仕組みのように思いました。
アクセストークンを持っていなかったり不正なら、未ログインユーザとしてアクセスを続行したいのですが、そういう工夫をするフックを書こうにも、まず到達自体しません。
「緩い認証」はどのように実現できるでしょうか?
今回 passport-jwt
を初めて使っています。初歩的なアドバイスでも助かります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 21:06