Koa实现JWT用户认证需要哪些步骤
这次给大家带来Koa实现JWT用户认证需要哪些步骤,Koa实现JWT用户认证的注意事项有哪些,下面就是实战案例,一起来看一下。
一、前置知识
基于Token的身份验证
Koajs 中文文档
Koa 框架教程
二、环境
Microsoft Visual Studio 2017集成开发环境
Node.js v8.9.4Javascript运行环境
三、开始动手,一步步来完善
1、创建基础的静态资源服务器、基础架构
以下是基本的代码,实现静态服务器,以及一个当token验证异常时候的处理。
下面我们将在这个基本代码下逐步增加注册、登录、信息的功能。
const path = require('path'); // 用于处理目录路径 const Koa = require('koa'); // web开发框架 const serve = require('koa-static'); // 静态资源处理 const route = require('koa-route'); // 路由中间件 const jwt = require('jsonwebtoken'); // 用于签发、解析`token` const jwtKoa = require('koa-jwt'); // 用于路由权限控制 const koaBody = require('koa-body'); // 用于查询字符串解析到`ctx.request.query` const app = new Koa(); const website = { scheme: 'http', host: 'localhost', port: 1337, join: function () { return `${this.scheme}://${this.host}:${this.port}` } } /* jwt密钥 */ const secret = 'secret'; /* 当token验证异常时候的处理,如token过期、token错误 */ app.use((ctx, next) => { return next().catch((err) => { if (err.status === 401) { ctx.status = 401; ctx.body = { ok: false, msg: err.originalError ? err.originalError.message : err.message } } else { throw err; } }); }); /* 查询字符串解析到`ctx.request.query` */ app.use(koaBody()); /* 路由权限控制 */ // 待办事项…… /* POST /api/register 注册 */ // 待办事项…… /* GET /api/login 登录 */ // 待办事项…… /* GET /api/info 信息 */ // 待办事项…… /* 静态资源处理 */ app.use(serve(path.join(dirname, 'static'))); /* 监听服务器端口 */ app.listen(website.port, () => { console.log(`${website.join()} 服务器已经启动!`); });
下面,我们将在注册、登录、信息的注释底下添加实现的代码。
2、路由权限控制
注册、登录接口、其它资源不需要认证,信息接口需要认证。
/* 路由权限控制 */ app.use(jwtKoa({ secret: secret }).unless({ // 设置login、register接口,可以不需要认证访问 path: [ /^\/api\/login/, /^\/api\/register/, /^((?!\/api).)*$/ // 设置除了私有接口外的其它资源,可以不需要认证访问 ] }));
3、注册
/* POST /api/register 注册 */ app.use(route.post('/api/register', async (ctx, next) => { const body = ctx.request.body; /* * body = { * user : '御焱', * password : '123456' * } */ // 判断 body.user 和 body.password 格式是否正确 // 待办事项…… // 判断用户是否已经注册 // 待办事项…… // 保存到新用户到数据库中 // 待办事项…… // 是否注册成功 let 是否注册成功 = true; if (是否注册成功) { // 返回一个注册成功的JOSN数据给前端 return ctx.body = { ok: true, msg: '注册成功', token: getToken({ user: body.user, password: body.password }) } } else { // 返回一个注册失败的JOSN数据给前端 return ctx.body = { ok: false, msg: '注册失败' } } })); /* 获取一个期限为4小时的token */ function getToken(payload = {}) { return jwt.sign(payload, secret, { expiresIn: '4h' }); }
3、登录
/* GET /api/login 登录 */ app.use(route.get('/api/login', async (ctx, next) => { const query = ctx.request.query; /* * query = { * user : '御焱', * password : '123456' * } */ // 判断 query.user 和 query.password 格式是否正确 // 待办事项…… // 判断是否已经注册 // 待办事项…… // 判断姓名、学号是否正确 // 待办事项…… return ctx.body = { ok: true, msg: '登录成功', token: getToken({ user: query.user, password: query.password }) } }));
前端获取到token之后,可以保存在任意本地存储里。
4、信息
/* GET /api/info 信息 */ app.use(route.get('/api/info', async (ctx, next) => { // 前端访问时会附带token在请求头 payload = getJWTPayload(ctx.headers.authorization) /* * payload = { * user : "御焱", * iat : 1524042454, * exp : 1524056854 * } */ // 根据 payload.user 查询该用户在数据库中的信息 // 待办事项…… const info = { name: '御焱', age: 10, sex: '男' } let 获取信息成功 = true; if (获取信息成功) { return ctx.body = { ok: true, msg: '获取信息成功', data: info } } else { return ctx.body = { ok: false, msg: '获取信息失败' } } })); /* 通过token获取JWT的payload部分 */ function getJWTPayload(token) { // 验证并解析JWT return jwt.verify(token.split(' ')[1], secret); }
访问需要认证的接口时,需要在request头附带Authorization:Bearer [token]字段。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Atas ialah kandungan terperinci Koa实现JWT用户认证需要哪些步骤. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





1.1.1.1 Kaedah log masuk untuk sistem pengesahan Internet: 1. Cari isyarat wayarles rangkaian kampus dan sambungkan 2. Buka penyemak imbas dan pilih "Layanan Diri" pada antara muka pengesahan pop timbul 3. Masukkan nama pengguna dan kata laluan awal untuk log masuk; 4. Lengkapkan maklumat peribadi dan tetapkan kata laluan yang kukuh.

JWT (JSONWebToken) ialah mekanisme pengesahan dan kebenaran ringan yang menggunakan objek JSON sebagai token keselamatan untuk menghantar maklumat identiti pengguna dengan selamat antara berbilang sistem. ThinkPHP6 ialah rangka kerja MVC yang cekap dan fleksibel berdasarkan bahasa PHP Ia menyediakan banyak alat dan fungsi yang berguna, termasuk mekanisme pengesahan JWT. Dalam artikel ini, kami akan memperkenalkan cara menggunakan ThinkPHP6 untuk pengesahan JWT untuk memastikan keselamatan dan kebolehpercayaan aplikasi web

Perbezaan antara pensijilan akaun rasmi WeChat dan bukan pensijilan terletak pada logo pensijilan, kebenaran fungsi, kekerapan tolak, kebenaran antara muka dan kepercayaan pengguna. Pengenalan terperinci: 1. Logo pensijilan akaun awam yang disahkan akan memperoleh logo pensijilan rasmi, iaitu logo V biru ini boleh meningkatkan kredibiliti dan kewibawaan akaun awam dan memudahkan pengguna mengenal pasti akaun awam rasmi yang sebenar ; 2. Keizinan fungsi Akaun awam yang diperakui mempunyai lebih banyak fungsi dan kebenaran daripada akaun awam yang diperakui Contohnya, akaun awam yang diperakui boleh memohon untuk mengaktifkan fungsi pembayaran WeChat untuk merealisasikan pembayaran dalam talian dan operasi komersial.

Apakah permainan yang boleh dimainkan dengan i34150 dengan grafik bebas 1G. Bolehkah ia bermain permainan kecil seperti LoL? GTX750 dan GTX750TI adalah pilihan kad grafik yang sangat sesuai. Jika anda hanya bermain beberapa permainan kecil atau tidak bermain permainan, adalah disyorkan untuk menggunakan kad grafik bersepadu i34150. Secara umumnya, perbezaan harga antara kad grafik dan pemproses tidak begitu besar, jadi adalah penting untuk memilih kombinasi yang munasabah. Jika anda memerlukan memori video 2G, disyorkan untuk memilih GTX750TI jika anda hanya memerlukan memori video 1G, pilih sahaja GTX750; GTX750TI boleh dilihat sebagai versi GTX750 yang dipertingkatkan, dengan keupayaan overclocking. Kad grafik yang boleh dipasangkan dengan i34150 bergantung pada keperluan anda Jika anda bercadang untuk bermain permainan bersendirian, anda disyorkan untuk mempertimbangkan untuk menukar kad grafik. anda boleh memilih

Pensijilan KC adalah untuk membolehkan pengguna memahami dengan lebih jelas tanda pensijilan yang ditanda pada produk yang mereka beli. Ia adalah tanda pensijilan bersatu nasional yang digunakan untuk mengurangkan pelbagai yuran pensijilan yang ditanggung oleh pengeluar produk. Institut Piawaian Teknikal Korea (KATS) mengumumkan pada 20 Ogos 2008 bahawa ia akan melaksanakan pensijilan KC dari Julai 2009 hingga Disember 2010.

Apakah konfigurasi yang diperlukan untuk menggunakan CAD dengan lancar? Untuk menggunakan perisian CAD dengan lancar, anda perlu memenuhi keperluan konfigurasi berikut: Keperluan pemproses: Untuk menjalankan "Word Play Flowers" dengan lancar, anda perlu dilengkapi dengan sekurang-kurangnya satu Intel Corei5 atau Pemproses AMD Ryzen5 atau ke atas. Sudah tentu, jika anda memilih pemproses berprestasi tinggi, anda akan mendapat kelajuan pemprosesan yang lebih pantas dan prestasi yang lebih baik. Memori adalah komponen yang sangat penting dalam komputer Ia mempunyai kesan langsung kepada prestasi dan pengalaman pengguna komputer. Secara umumnya, kami mengesyorkan sekurang-kurangnya 8GB memori, yang boleh memenuhi keperluan kebanyakan penggunaan harian. Walau bagaimanapun, untuk prestasi yang lebih baik dan pengalaman penggunaan yang lebih lancar, adalah disyorkan untuk memilih konfigurasi memori 16GB atau lebih tinggi. Ini memastikan bahawa

Dalam artikel ini, kita akan mempelajari tentang fungsi lambda dalam Python dan sebab kita memerlukannya, dan melihat beberapa contoh praktikal fungsi lambda. Apakah fungsi lambda dalam Python? Fungsi Lambda sering dipanggil "fungsi tanpa nama" dan sama seperti fungsi Python biasa, kecuali ia boleh ditakrifkan tanpa nama. Kata kunci >def digunakan untuk mentakrifkan fungsi biasa, manakala kata kunci lambda digunakan untuk mentakrifkan fungsi tanpa nama. Walau bagaimanapun, ia terhad kepada ungkapan satu baris. Mereka, seperti fungsi biasa, boleh menerima berbilang hujah. Syntax lambdaarguments:expression Fungsi ini menerima sebarang bilangan input, tetapi hanya menilai dan mengembalikan ungkapan. kambing

Menggunakan cahaya untuk melatih rangkaian saraf, keputusan Universiti Tsinghua diterbitkan baru-baru ini dalam Nature! Apakah yang perlu saya lakukan jika saya tidak boleh menggunakan algoritma perambatan balik? Mereka mencadangkan kaedah latihan Mod Hadapan Penuh (FFM) yang secara langsung melaksanakan proses latihan dalam sistem optik fizikal, mengatasi batasan simulasi komputer digital tradisional. Ringkasnya, dahulunya adalah perlu untuk memodelkan sistem fizikal secara terperinci dan kemudian mensimulasikan model ini pada komputer untuk melatih rangkaian. Kaedah FFM menghapuskan proses pemodelan dan membenarkan sistem menggunakan data percubaan secara langsung untuk pembelajaran dan pengoptimuman. Ini juga bermakna latihan tidak lagi perlu menyemak setiap lapisan dari belakang ke hadapan (backpropagation), tetapi boleh terus mengemas kini parameter rangkaian dari hadapan ke belakang. Untuk menggunakan analogi, seperti teka-teki, penyebaran belakang
