FILOTチャットアプリケーション-2(Auth)の作成
16200 ワード
FILOTチャットアプリケーション-2(Auth)の作成
npm bcrypt/jsonwebtokenを用いてAuthを実現した。
以前は会員登録を知っていましたが、登録部分は本当に難しいです.暗号化から、有効性を確認する必要があるものが多いと思います.しかし、Nodejsの有用なパッケージのおかげで、実現は難しくない.もちろん、ハッシュを深く学ぶのは難しいですが...
Join
const join = async (req, res) => {
const {username, password, confirmpassword, name, phone_number} = req.body;
if (password != confirmpassword) {
return res.status(409).json({message: "비밀번호가 틀립니다"});
}
const existingUser = await User.exists({id: username});
if (existingUser) {
return res
.status(409)
.json({message: "아이디 혹은 닉넴이이 이미 사용중입니다."});
}
const newPassword = await bcrypt.hash(password, config.bcrypt.salt);
try {
const user = await User.create({
id: username,
password: newPassword,
name,
phone_number,
});
const token =jwt.sign(user.id, config.jwt.secretKey, {
expiresIn: config.jwt.expireInSec,
});
return res.status(200).json(token);
} catch (error) {
console.error(error);
res.json({message: error});
}
};
Login const login = async (req, res, next) => {
const {username, password} = req.body;
const user = await User.findOne({id: username});
if (!user) {
return res.status(401).json({message: "없는 아이디입니다."});
}
const ok = await bcrypt.compare(password, user.password);
if (!ok) {
return res.status(401).json({message: "비밀번호가 틀려요."});
}
const token = createJwt(user.id);
req.headers.token = token;
return res.json({token});
};
const join = async (req, res) => {
const {username, password, confirmpassword, name, phone_number} = req.body;
if (password != confirmpassword) {
return res.status(409).json({message: "비밀번호가 틀립니다"});
}
const existingUser = await User.exists({id: username});
if (existingUser) {
return res
.status(409)
.json({message: "아이디 혹은 닉넴이이 이미 사용중입니다."});
}
const newPassword = await bcrypt.hash(password, config.bcrypt.salt);
try {
const user = await User.create({
id: username,
password: newPassword,
name,
phone_number,
});
const token =jwt.sign(user.id, config.jwt.secretKey, {
expiresIn: config.jwt.expireInSec,
});
return res.status(200).json(token);
} catch (error) {
console.error(error);
res.json({message: error});
}
};
Login const login = async (req, res, next) => {
const {username, password} = req.body;
const user = await User.findOne({id: username});
if (!user) {
return res.status(401).json({message: "없는 아이디입니다."});
}
const ok = await bcrypt.compare(password, user.password);
if (!ok) {
return res.status(401).json({message: "비밀번호가 틀려요."});
}
const token = createJwt(user.id);
req.headers.token = token;
return res.json({token});
};
const login = async (req, res, next) => {
const {username, password} = req.body;
const user = await User.findOne({id: username});
if (!user) {
return res.status(401).json({message: "없는 아이디입니다."});
}
const ok = await bcrypt.compare(password, user.password);
if (!ok) {
return res.status(401).json({message: "비밀번호가 틀려요."});
}
const token = createJwt(user.id);
req.headers.token = token;
return res.json({token});
};
JWT
const auth = async (req, res, next) => {
const token = req.get("token");
if (!token) {
return res.status(401).json(AUTH_ERROR);
}
jwt.verify(token, config.jwt.secretKey, async (error, decoded) => {
if (error) {
return res.status(401).json(AUTH_ERROR);
}
const user = await User.findOne({id: decoded.id});
if (!user) {
return res.status(401).json(AUTH_ERROR);
}
req.id = user.id;
next();
});
};
const auth = async (req, res, next) => {
const token = req.get("token");
if (!token) {
return res.status(401).json(AUTH_ERROR);
}
jwt.verify(token, config.jwt.secretKey, async (error, decoded) => {
if (error) {
return res.status(401).json(AUTH_ERROR);
}
const user = await User.findOne({id: decoded.id});
if (!user) {
return res.status(401).json(AUTH_ERROR);
}
req.id = user.id;
next();
});
};
その後、フロントの友達にキー値を同じにするように要求されました.
フロントを考えず、「コラボレーションって何?」もう一度思い出した.
Reference
この問題について(FILOTチャットアプリケーション-2(Auth)の作成), 我々は、より多くの情報をここで見つけました https://velog.io/@wonjongseo/FILOT-채팅앱-만들기-2-Authテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol