ログイン要求を行うときにどのhttpメソッドを使用する必要があるのか、またその理由を知りたいのですが。このリクエストはサーバー上にオブジェクト(ユーザーセッション)を作成するので、POSTである必要があると思いますが、どう思いますか?しかし、ログイン要求はべき等である必要があるため、PUTである可能性がありますね。
ログアウトリクエストについても同じ質問ですが、DELETEメソッドを使用する必要がありますか?
ログイン要求を行うときにどのhttpメソッドを使用する必要があるのか、またその理由を知りたいのですが。このリクエストはサーバー上にオブジェクト(ユーザーセッション)を作成するので、POSTである必要があると思いますが、どう思いますか?しかし、ログイン要求はべき等である必要があるため、PUTである可能性がありますね。
ログアウトリクエストについても同じ質問ですが、DELETEメソッドを使用する必要がありますか?
ログイン要求がユーザー名とパスワードを提供するユーザーを介して行われる場合、詳細はURLではなくHTTPメッセージ本文で送信されるため、POSTが推奨されます。https経由で暗号化していない限り、プレーンテキストで送信されます。
HTTP DELETEメソッドは、サーバー上の何かを削除するためのリクエストです。メモリ内のユーザーセッションを削除することは、実際には意図されたものではないと思います。さらに、ユーザーレコード自体を削除するためのものです。したがって、潜在的にログアウトは単なるGETである可能性があります(例:www.yoursite.com/logout)。
LOGIN&LOGOUTメソッドを基本的なCRUD操作CREATE&DELETEに変換できると思います。SESSIONという新しいリソースを作成し、ログアウト時に破棄するため、次のようになります。
IMGタグ付きの電子メールを送信するか、そのようなIMGタグが存在するWebサイトにリンクするだけで誰もが攻撃を行うことができるという理由だけで、私はGETとしてLOGOUTを実行することは決してありません。(<img src="youtsite.com/logout" />)
PS長い間、RESTfulログイン/ログアウトをどのように作成するのか疑問に思っていましたが、それは本当に簡単であることがわかりました。説明したとおりに実行します。CREATEメソッドとDELETEメソッドで/ session /エンドポイントを使用すれば、問題ありません。何らかの方法でセッションを更新する場合は、UPDATEを使用することもできます...
これがRESTガイドと推奨事項に基づく私の解決策です:
ログイン-リソースを作成します
リクエスト:
POST => https://example.com/sessions/
BODY => {'login': 'login@example.com', 'password': '123456'}
応答:
http status code 201 (Created)
{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}
LOGOUT-リソースを削除します
リクエスト:
DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/
応答:
http status code 204 (No Content)
ログインリクエストには、POSTメソッドを使用する必要があります。私たちのログインデータは安全であり、セキュリティが必要です。POSTメソッドを使用すると、データはバンドルでサーバーに送信されます。しかし、GETメソッドでは、データがサーバーに送信され、その後に、すべての人に表示されるurlリクエストを追加するようなurlが続きます。
したがって、安全な認証および承認プロセスのために、POSTメソッドを使用する必要があります。
このソリューションがお役に立てば幸いです。
ありがとう
ログアウト方法について:
Spring(Java Framework)のドキュメントでは、GETによってCSRF(Cross-Site Request Forgery)に対して脆弱になり、ユーザーがログアウトする可能性があるため、POSTリクエストが優先されると記載されています。
CSRFを追加すると、HTTPPOSTのみを使用するようにLogoutFilterが更新されます。これにより、ログアウトにCSRFトークンが必要になり、悪意のあるユーザーがユーザーを強制的にログアウトできないようになります。
ログインにはPOSTも使用する必要があります(本文は暗号化できます。他の回答を参照してください)。
ログインにはPOSTを使用します。以下は、ExpressとMongooseでNodejsを使用したLOGINメソッドのコードです。
your router.js
const express = require("express");
const router = express.Router();
router.post("/login", login);
your controller.js
export.login = async(req, res) => {
//find the user based on email
const {email, password} = req.body;
try{
const user = awaitUser.findOne({email});
if(user==null)
return res.status(400).json({err : "User with
email doesnot exists.Please signup"});
}
catch(error){
return res.status(500).json({err :
error.message});
}
//IF EVERYTHING GOES FINE, ASSIGN YOUR TOKEN
make sure you have JWT installed
const token = jwt.sign({_id: user._id}, YOUR_SECRET_KEY);
res.cookie('t');
const {_id, name, email} = user;
return res.json({token, user : {_id, email, name}});
}