Rumah hujung hadapan web tutorial js Koa实现JWT用户认证需要哪些步骤

Koa实现JWT用户认证需要哪些步骤

May 07, 2018 pm 05:08 PM
yang mana Pensijilan perlukan

这次给大家带来Koa实现JWT用户认证需要哪些步骤,Koa实现JWT用户认证的注意事项有哪些,下面就是实战案例,一起来看一下。

一、前置知识

  1. 基于Token的身份验证

  2. Koajs 中文文档

  3. Koa 框架教程

二、环境

  1. Microsoft Visual Studio 2017集成开发环境

  2. 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()} 服务器已经启动!`);
});
Salin selepas log masuk

下面,我们将在注册、登录、信息的注释底下添加实现的代码。

2、路由权限控制

注册、登录接口、其它资源不需要认证,信息接口需要认证。

/* 路由权限控制 */
app.use(jwtKoa({ secret: secret }).unless({
 // 设置login、register接口,可以不需要认证访问
 path: [
 /^\/api\/login/,
 /^\/api\/register/,
 /^((?!\/api).)*$/ // 设置除了私有接口外的其它资源,可以不需要认证访问
 ]
}));
Salin selepas log masuk

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' });
}
Salin selepas log masuk

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 })
 }
}));
Salin selepas log masuk

前端获取到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);
}
Salin selepas log masuk

访问需要认证的接口时,需要在request头附带Authorization:Bearer [token]字段。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Vue.js开发mpvue框架步骤详解

jquery fullpage插件添加头部与尾部版权相关

vue里使用sass配置步骤详解

Atas ialah kandungan terperinci Koa实现JWT用户认证需要哪些步骤. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

1.1.1.1 Cara log masuk ke sistem pengesahan dalam talian 1.1.1.1 Cara log masuk ke sistem pengesahan dalam talian Apr 20, 2023 am 10:44 AM

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.

Bagaimana untuk menggunakan ThinkPHP6 untuk pengesahan JWT? Bagaimana untuk menggunakan ThinkPHP6 untuk pengesahan JWT? Jun 12, 2023 pm 12:18 PM

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

Apakah perbezaan antara pensijilan akaun rasmi WeChat dan bukan pensijilan? Apakah perbezaan antara pensijilan akaun rasmi WeChat dan bukan pensijilan? Sep 19, 2023 pm 02:15 PM

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.

Permainan manakah yang sesuai untuk bermain dengan grafik bebas i34150 dan 1G (permainan manakah yang sesuai untuk i34150) Permainan manakah yang sesuai untuk bermain dengan grafik bebas i34150 dan 1G (permainan manakah yang sesuai untuk i34150) Jan 05, 2024 pm 08:24 PM

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

Apakah pensijilan kc? Apakah pensijilan kc? Oct 11, 2022 pm 03:20 PM

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 menjalankan CAD dengan lancar? Apakah konfigurasi yang diperlukan untuk menjalankan CAD dengan lancar? Jan 01, 2024 pm 07:17 PM

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

Apakah fungsi lambda dalam Python dan mengapa kita memerlukannya? Apakah fungsi lambda dalam Python dan mengapa kita memerlukannya? Aug 25, 2023 pm 02:41 PM

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

Tsinghua Optik AI muncul dalam Alam Semula Jadi! Rangkaian saraf fizikal, perambatan belakang tidak lagi diperlukan Tsinghua Optik AI muncul dalam Alam Semula Jadi! Rangkaian saraf fizikal, perambatan belakang tidak lagi diperlukan Aug 10, 2024 pm 10:15 PM

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

See all articles