Koma 2ユーザ登録により暗号文を生成し、ユーザ登録時にtokenを生成して返信する.
3077 ワード
プロジェクト開発時にユーザー登録と登録のモジュールが避けられません.ユーザーが暗号文を生成して保存し、ユーザー登録時に暗号文のチェックとtokenの作成とチェックも重要です.この文章はKooa 2開発プロジェクトのこの教程を教えます.
一、ユーザー登録時に暗号文のパスワードの生成と検証暗号化が必要なモジュールにbcrypt をインストールして導入する.
bcryptはhashモードで暗号文を生成するモジュールであり、同じパスワードでも毎回生成されるhash暗号文は違っています.これは以前のMD 5の暗号化モードよりずっと安全です.他の人がこの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を初期化する
3.config/passport.jsの配置
jsonwebtokenを導入してtokenを生成する.
導入する
tokenのルートを検証する必要があります.フロントエンドは要求ヘッダに追加しなければなりません.
Authorzation:バックエンドの戻るtoken値
一、ユーザー登録時に暗号文のパスワードの生成と検証
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値