ノードの登録とログインについて本当に理解していますか?

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)
})

おすすめ

転載: blog.csdn.net/qq_48164590/article/details/130403714