MERN을 이용한 ECOMMERCE 웹사이트 Part-6.2 ( 인증 { 비밀번호 보안 } )
이 블로그에서는 사용자 세부 정보, 특히 비밀번호를 보호합니다.
여기에서 사용자를 등록할 때 원하지 않는 사용자
password
를 볼 수 있고 데이터베이스에 저장encrypt
하기 전에 비밀번호user details
를 입력해야 합니다.password
는 데이터베이스에서 암호화되지 않습니다.따라서 비밀번호를 암호화하기 위해 다음을 수행합니다.
1단계
bcryptjs
파일에서 userModel.js
가져오기2 단계 우리는 우리의
pre save event
를 내보내기 전에 userSchema
에 userModel
를 만듭니다.3단계 이 이벤트는 함수를 사용하며 여기서는
async function()
키워드를 사용할 수 없도록 this
키워드를 제공했습니다.이제 다음 코드를 작성하여 비밀번호를 암호화해 보겠습니다.
여기서 우리는
arrow function
두 개의 인수를 사용했습니다. 첫 번째는 해시에 필요한 것이고 두 번째는 힘입니다. 파워 값이 클수록 암호를 해킹하기가 더 어려워집니다. 권장 값이므로 10을 사용하고 있습니다.그러나 사용자를 업데이트해야 하는 경우에는 이미 있는
bcrypt.hash()
암호를 원하지 않습니다hash
. 따라서 암호화하기 전에 다음 논리를 사용하는 것을 방지하기 위해.여기서 우리는 암호
hashed
가 있는지 확인하고 그렇지 않은 경우is modified
를 반환하고 이미 수정된 경우 다시 수정하지 않습니다next()
.결정적인
따라서 이 블로그의 최종
password
파일은const mongoose = require("mongoose");
const validator = require("validator");
const bcrypt = require("bcryptjs");
const userSchema = new mongoose.Schema({
name: {
type: String,
required: [true, "Please Enter Your Name"],
maxLength: [30, "Name cannot exceed 30 characters"],
minLength: [4, "Name should have more than 4 characters"],
},
email: {
type: String,
required: [true, "Please Enter Your Email"],
unique: true,
validate: [validator.isEmail, "Please Enter a valid Email"],
},
password: {
type: String,
required: [true, "Please Enter Your Password"],
minLength: [8, "Password should be greater than 8 characters"],
select: false,
},
avatar: {
public_id: {
type: String,
required: true,
},
url: {
type: String,
required: true,
},
},
role: {
type: String,
default: "user",
},
createdAt: {
type: Date,
default: Date.now,
},
resetPasswordToken: String,
resetPasswordExpire: Date,
});
userSchema.pre("save", async function (next) {
if (!this.isModified("password")) {
next();
}
this.password = await bcrypt.hash(this.password, 10);
});
module.exports = mongoose.model("User", userSchema);
테스트
이제 비밀번호를 볼 수 있는지 봅시다.
여기에서 새 사용자를 등록했으며 이에 대한 응답으로 로그인에 필요한 사용자 세부 정보를 받고 있습니다. 그러나
userModel.js
필드를 자세히 살펴보십시오. 그것의 해시. 이제 아무도 이 해시 코드를 보고 암호가 무엇인지 알 수 없습니다.참고 지난 블로그에서 한 사람은 사용자가 제공한 비밀번호를 반환한다고 말했습니다. 그러나
password
필드로 해결된 우리는 사용자가 password
우리가 사용한 암호see
를 원할 때까지 표시되지 않습니다.등록하는 동안 자동 로그인을 원하므로 비밀번호를 반환해야 합니다(이는 다음 블로그에서 구현됩니다).
참고로 저도 이 프로젝트를 하면서 동시에 글을 쓰고 있기 때문에 분명히 실수가 있을 수 있습니다. 따라서 한 부분에서 실수가 발생하면 반드시 수정하고 다음 부분에서 해당 실수를 지적합니다.
그러니 꾸짖지 마세요 <3.
Reference
이 문제에 관하여(MERN을 이용한 ECOMMERCE 웹사이트 Part-6.2 ( 인증 { 비밀번호 보안 } )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bikramjeetsarmah/ecommerce-website-using-mern-part-62-authentication-securing-password--2ig9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)