로그인 요청을 할 때 사용해야하는 http 방법을 알고 싶습니다. 그 이유는 무엇입니까? 이 요청은 서버에 객체 (사용자 세션)를 생성하므로 POST 여야한다고 생각합니다. 어떻게 생각하십니까? 그러나 로그인 요청은 멱 등성이 있어야하므로 PUT 일 수 있습니다.
로그 아웃 요청에 대한 동일한 질문입니다. DELETE 메서드를 사용해야합니까?
답변:
로그인 요청이 사용자 이름과 암호를 제공하는 사용자를 통해 이루어지는 경우 세부 정보가 URL이 아닌 HTTP 메시지 본문에 전송되므로 POST가 바람직합니다. https를 통해 암호화하지 않는 한 여전히 일반 텍스트로 전송됩니다.
HTTP DELETE 메서드는 서버에서 항목을 삭제하라는 요청입니다. 저는 메모리 내 사용자 세션을 삭제하는 것이 실제로 의도 한 것이라고 생각하지 않습니다. 더 많은 것은 사용자 레코드 자체를 삭제하기위한 것입니다. 따라서 잠재적으로 로그 아웃은 www.yoursite.com/logout과 같은 GET 일 수 있습니다.
LOGIN & LOGOUT 메소드를 기본 CRUD 작업 CREATE & DELETE로 변환 할 수 있다고 생각합니다. SESSION이라는 새 리소스를 생성하고 로그 아웃 할 때 제거하므로 :
IMG 태그가있는 이메일이나 IMG 태그가있는 웹 사이트에 대한 링크를 보내는 것만으로도 누구나 공격을 할 수 있기 때문에 GET으로 LOGOUT하지 않습니다. ( <img src="youtsite.com/logout" />
)
추신 오랫동안 나는 RESTful 로그인 / 로그 아웃을 어떻게 생성 할 수 있을지 궁금해했는데 정말 간단하다는 것이 밝혀졌습니다. 제가 설명한대로 수행합니다. / session / endpoint를 CREATE 및 DELETE 메서드와 함께 사용하면 괜찮습니다. 세션을 어떤 식 으로든 업데이트하려면 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)
로그 아웃 방법에 관하여 :
Spring (Java Framework) 문서에서는 GET이 CSRF (Cross-Site Request Forgery)에 취약하고 사용자가 로그 아웃 될 수 있기 때문에 POST 요청이 선호된다고 명시합니다.
CSRF를 추가하면 HTTP POST 만 사용하도록 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}});
}