記事ディレクトリ
1. データテーブルを作成する
1.1 ユーザーテーブルの作成
2mysqlファイルをインストールして設定する
2.1 mysqlモジュールをインストールする
npm i mysql@2.18.1
2.2 データベースインデックス内
const mysql=require('mysql')
//创建数据库连接对象
const db=mysql.createPool({
host:'localhost',
user:'root',
password:'123456',
database:'my_sql-o1'
})
//向外共享
module.exports=db
3.登録機能
登録の一般的なプロセス
1. フォーム データが正当であるかどうかを確認します
。 2. ユーザー名が占有されているかどうかを確認します。
3. パスワードの暗号化処理
4. 新しいユーザーを挿入します。
3.1 フォームデータが正当であることを確認する
//对客户端的数据进行校验
if(userInfo.username==''||userInfo.password==''){
return res.send({
status:1,
msg:'用户名和密码不能为空'
})
}
3.2 ユーザー占有率の決定
//查询用户是否重复
let sql='select * from ev_users where username=?'
db.query(sql,[userInfo.username],(error,result)=>{
if(error) {
return res.send({
status:1,msg:error.message})
}
console.log(result.length)
if(result.length>0){
return res.send({
status:1,msg:"用户被占用"})
}
3.3 パスワードの暗号化
1. bcryptjsをダウンロードする
npm i bcryptjs@2.4.3
2.bcryptjsの導入
//引入加密包
const bcrypt=require('bcryptjs')
//密码加密
userInfo.password=bcrypt.hashSync(userInfo.password,10)
3.4 ユーザーの挿入
let sql1='insert into ev_users set ?'
db.query(sql1,{
username:userInfo.username,password:userInfo.password},(error,result)=>{
if(error) return res.send({
status:1,
msg:error.message
})
res.send({
status:0,
msg:"插入成功"
})
})
エラー処理関数をカプセル化する
app.js内
//封装错误处理函数
app.use((req,res,next)=>{
res.cc=function(err,status=1){
res.send({
status,
message:err instanceof Error ?err.message:err
})
}
next()
})
コードで呼び出される
return res.cc('用户被占用')
4. ログイン機能
一般的なログイン プロセス
1. フロントエンドによって送信されたバックエンド データが合法かどうかを判断します。
2. ログインユーザーが存在するか確認します。
3. 現在のユーザーのパスワードが正しいかどうかを確認します。
4.1 ログインパスワードの判定
bcrypt.compareSync は、ユーザーが入力したパスワードとデータ パスワードが正しいかどうかを判断し、戻り値の型はブール値です。
//检验密码是否正确
const compareResult=bcrypt.compareSync(userInfo.password,result[0].password)
4.2 トークン文字の生成
1. jsonwebtokenをダウンロードする
npm i jsonwebtoken@8.5.1
2.インポート
//引入token
const jwt=require('jsonwebtoken')
3. 暗号化フォームの構成
4. トークン暗号化
jwt.sign には、トークンを生成するためのデータ、暗号化された形式、トークンの有効期間の 3 つのパラメーターがあります。
//将用户的信息加密,生成token
const tokenStr=jwt.sign(user,config.jwtscrestKey,{
expiresIn:'10h'
})
res.send({
status:0,
msg:'登录成功',
token:'Bearer '+tokenStr
})
4.3 トークンミドルウェアの解析
1. 解析ミドルウェアをインストールする
npm i express-jwt@5.3.3
2.App.jsで導入
//token解析中间件
const expressJWT=require('express-jwt')
//映入解密
const config=require('./config')
app.use(expressJWT({
secret:config.jwtscrestKey}).unless({
path:['/^\/api/']}))
3. エラーミドルウェア内
//错误中间件
app.use((req,res,err,next)=>{
if(err.name=='UnauthorizedError') return res.cc('身份认证失败')
res.cc(err)
})