Koma 2ユーザ登録により暗号文を生成し、ユーザ登録時にtokenを生成して返信する.

3077 ワード

プロジェクト開発時にユーザー登録と登録のモジュールが避けられません.ユーザーが暗号文を生成して保存し、ユーザー登録時に暗号文のチェックとtokenの作成とチェックも重要です.この文章はKooa 2開発プロジェクトのこの教程を教えます.
一、ユーザー登録時に暗号文のパスワードの生成と検証
  • 暗号化が必要なモジュールにbcrypt
  • をインストールして導入する.
    bcryptはhashモードで暗号文を生成するモジュールであり、同じパスワードでも毎回生成されるhash暗号文は違っています.これは以前のMD 5の暗号化モードよりずっと安全です.他の人がこのhash暗号文を解読することはほとんど不可能です.
    npm install bcrypt --save
    const bcrypt = require('bcrypt')
    
    2.暗号化が必要なところでbcryptを使ってhashを生成する
    const hashPassword = bcrypt.hashSync(password, 10)
    
    3.この暗号化されたhashパスワードをデータベースに保存します.
    const res = await userModel.create({username, hashPassword})
    
    4.ユーザ登録時にユーザ名が存在するかどうかを確認し、存在すればこのhashパスワードが正しいかを確認する.
    const confirmRes=bcrypt.com areSync(password,user.password)
    passwordはユーザ登録時に送信されたパスワードで、user.passwordはデータベースに保存されたhashパスワードで、検証後にconfirmResに戻るのはブール値で、trueに等しいです.falseに等しくないです.
    二、tokenを生成してフロントエンドに戻り、他のインターフェースで呼び出した時に検証する.
    1.必要なモジュールの取り付け
    npm install Jsonwebtoken koa-passport passport-jwt--save
    jsonwebtokenはtokenを生成するために使用され、koa-passportはユーザ権限認証を行うために使用されています.(他のインターフェース起動時にtokenを検証する場合など)、passportは専門的に検証tokenを解読するために使用されます.(koa-passportに依存します)
    2.ap.jsでkoa-passportを初期化する
    const passport = require('koa-passport')
    app.use(passport.initialize())
    app.use(passport.session())
    require('./config/passport')(passport)
    
    前の3行は導入と初期化で、最後の行はkoa-passportの配置ファイルで、私は単独でconfig/passport.jsファイルの中に書きます.
    3.config/passport.jsの配置
    module.exports = passport => {
      const secretOrKey = 'secret' //   token   ,      
      const {userModel} = require('../models/user')  //          token
      const JwtStrategy = require('passport-jwt').Strategy,
        ExtractJwt = require('passport-jwt').ExtractJwt;
      const opts = {}
      opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
      opts.secretOrKey = secretOrKey;
      passport.use(new JwtStrategy(opts, async function(jwt_payload, done) {
        const user = await userModel.findById(jwt_payload._id) // jwt_payload      token,   _id user         ,      true false
        if(user){
          return done(null, user)
        }else{
          return done(null, false)
        }
    }));
    }
    
    4.ユーザ登録時にtokenを生成する
    jsonwebtokenを導入してtokenを生成する.
    const jwt = require('jsonwebtoken')
    
    ユーザー登録のルートでjwt.signを使用して生成し、全部で3つのパラメータを定義します.最初はtokenに預け入れられた情報です.2番目はtokenの鍵です.config/passport.jsの構成の鍵と同じです.3番目は保存時間です.3600は1時間です.最後はtokenに返します.前にBerrerを追加します.
    const token = jwt.sign({_id: res._id,username: res.username}, 'secret', {expiresIn: 3600})
          ctx.body = {
            token: `Bearer ${token}`,
            msg: '    '
          }
    
    5.tokenを検証したいルートの中間部品でtokenを検証する
    導入するconst passport = require('koa-passport')中間部品で検証する
    passport.authenticate('jwt', { session: false })
    
    対応するルーティングにおいて、ctx.state.userを介してconfig/passport.js構成から戻ってきたユーザ情報を取得することができる.
    tokenのルートを検証する必要があります.フロントエンドは要求ヘッダに追加しなければなりません.
    Authorzation:バックエンドの戻るtoken値