Maison interface Web js tutoriel Comment utiliser le framework Nuxt pour l'authentification de routage et utiliser Koa et Session

Comment utiliser le framework Nuxt pour l'authentification de routage et utiliser Koa et Session

May 30, 2018 pm 03:09 PM
框架 conduire

Cette fois, je vais vous montrer comment utiliser le framework nuxt pour l'authentification de routage et utiliser Koa et Session Notes sur la façon d'utiliser le framework nuxt pour l'authentification de routage et utiliser Koa. et Session

Qu'est-ce que c'est ? Voici des cas réels.

Introduction

La page de gestion backend du blog a besoin d'un système de connexion, pensez donc à faire une authentification de routage La méthode de mise en œuvre est également donnée par. le site officiel de Nuxt, Lizi l'a réécrit et a également unifié le routage front-end et back-end.

Interception d'itinéraire

Le front-end utilise principalement le middleware

de Nuxt pour effectuer l'interception d'itinéraire est également requis ici. . L'arbre d'état est utilisé pour le faire.

middleware

middleware/auth.js
export default function ({ store, redirect }) {
 
 if (!store.state.user) {
  return redirect('/login')
 }
}
Copier après la connexion

Authentifier la page en authentifiant si les informations utilisateur sur l'arborescence d'état existent Redirection

layouts/admin.vue
export default {
  middleware: 'auth',
  components: {
   AdminAside
  }
 }
Copier après la connexion

Ajouter un middleware

nuxtServerInit sur la mise en page du système de gestion en arrière-plan

Dans le processus de rendu de NuxtJs, lorsqu'une requête arrive, la méthode nuxtServerInit est appelée en premier. Cette méthode peut être utilisée pour sauvegarder les données du serveur à l'avance.

Nous pouvons utiliser cette méthode pour recevoir des informations de session qui stockent les informations de l'utilisateur.
nuxtServerInit ({ commit }, { req, res }) {
  if (req.session && req.session.user) {
   const { username, password } = req.session.user
   const user = {
    username,
    password
   }
   commit('SET_USER', user)
  }
 },
Copier après la connexion

Une fois l'application terminée, certaines données que nous avons obtenues du serveur seront renseignées dans cet arbre d'état (magasin).

Selon l'exemple donné par le site officiel de NuxtJs, nous avons pratiquement terminé d'écrire la partie authentification de routage de la page. L'étape suivante consiste à écrire le code de cette partie côté serveur

Utiliser Koa et koa-session

Koa et koa-session

Le code back-end que j'utilise est le framework Koa et koa-session pour traiter la session.

Vous pouvez utiliser directement le framework Koa lors de la création d'un nouveau projet nuxt

vue init nuxt/koa
Copier après la connexion

Dépendances pertinentes

npm install koa-session
Copier après la connexion

Réécrire dans server.js

import Koa from 'koa'
import { Nuxt, Builder } from 'nuxt'
// after end
import session from 'koa-session'
async function start () {
 const app = new Koa()
 const host = process.env.HOST || '127.0.0.1'
 const port = process.env.PORT || 7998
 // Import and Set Nuxt.js options
 let config = require('../nuxt.config.js')
 config.dev = !(app.env === 'production')
 // Instantiate nuxt.js
 const nuxt = new Nuxt(config)
 // Build in development
 if (config.dev) {
  const builder = new Builder(nuxt)
  await builder.build()
 }
 // body-parser
 app.use(bodyParser())
 // mongodb
 // session
 app.keys = ['some session']
 const CONFIG = {
  key: 'SESSION', /** (string) cookie key (default is koa:sess) */
  /** (number || 'session') maxAge in ms (default is 1 days) */
  /** 'session' will result in a cookie that expires when session/browser is closed */
  /** Warning: If a session cookie is stolen, this cookie will never expire */
  maxAge: 86400000,
  overwrite: true, /** (boolean) can overwrite or not (default true) */
  httpOnly: true, /** (boolean) httpOnly or not (default true) */
  signed: true, /** (boolean) signed or not (default true) */
  rolling: false /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. default is false **/
 }
 app.use(session(CONFIG, app))
 // routes
 app.use(async (ctx, next) => {
  await next()
  ctx.status = 200 // koa defaults to 404 when it sees that status is unset
  return new Promise((resolve, reject) => {
   ctx.res.on('close', resolve)
   ctx.res.on('finish', resolve)
   nuxt.render(ctx.req, ctx.res, promise => {
    // nuxt.render passes a rejected promise into callback on error.
    promise.then(resolve).catch(reject)
   })
  })
 })
 app.listen(port, host)
 console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console
}
start()
Copier après la connexion

Pour l'utilisation de koa-session, vous pouvez vous référer à : Apprentissage du cookie et de la session à partir du middleware koa-session

Routage de connexion

// 登录
router.post('/api/login', async (ctx, next) => {
 const { username, password } = ctx.request.body
 let user,
  match
 try {
  user = await Admin.findOne({ user: username }).exec()
  if (user) {
   match = await user.comparePassword(password, user.password)
  }
 } catch (e) {
  throw new Error(e)
 }
 if (match) {
  ctx.session.user = {
   _id: user._id,
   username: user.user,
   nickname: user.nickname,
   role: user.role
  }
  console.log(ctx.session)
  return (ctx.body = {
   success: true,
   data: {
    username: user.user,
    nickname: user.nickname
   }
  })
 }
 return (ctx.body = {
  success: false,
  err: '密码错误'
 })
})
Copier après la connexion

Jusqu'à présent, l'ensemble du processus fonctionnel est fondamentalement terminé et très fluide, mais pour moi, il n'existe pas de code de navigation fluide.

la session n'est pas définie

Problème

nuxtServerInit ({ commit }, { req, res }) {
  if (req.session && req.session.user) { // res.session is not defined
   const { username, password } = req.session.user
   const user = {
    username,
    password
   }
   commit('SET_USER', user)
  }
 }
Copier après la connexion

Aucune information sur la session ne peut être obtenue dans nuxtServerInit, mais d'autres API peuvent l'obtenir pendant le séance, je soupçonnais qu'il y avait quelque chose qui n'allait pas avec Chestnut parce que je n'en trouvais pas la raison. .

Cause

Le dernier problème est dû à ma propre négligence et à la négligence de certains détails Parmi les châtaignes données sur le site officiel :

app.post('/api/login', function (req, res) {
 if (req.body.username === 'demo' && req.body.password === 'demo') {
  req.session.authUser = { username: 'demo' }
  return res.json({ username: 'demo' })
 }
 res.status(401).json({ error: 'Bad credentials' })
})
Copier après la connexion
<.> Il enregistre la session dans req.session, donc la session nuxtServerInit existe dans req.session. Cependant, j'utilise Koa2 et Koa-session analyse le cookie dans ctx.session, qui n'existe pas dans req. session.

Solution

Donc lors de l'injection de nuxt.render, ajoutez une session à la requête

app.use(async (ctx, next) => {
  await next()
  ctx.status = 200 // koa defaults to 404 when it sees that status is unset
  ctx.req.session = ctx.session
  return new Promise((resolve, reject) => {
   ctx.res.on('close', resolve)
   ctx.res.on('finish', resolve)
   nuxt.render(ctx.req, ctx.res, promise => {
    // nuxt.render passes a rejected promise into callback on error.
    promise.then(resolve).catch(reject)
   })
  })
 })
Copier après la connexion
Je crois que vous avez lu le cas dans cet article Vous maîtrisez la méthode. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Comment gérer le problème de performances gaspillées async/wait

Mise en œuvre JQuery d'un cas pratique de requête floue analyse

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment évaluer la rentabilité du support commercial des frameworks Java Comment évaluer la rentabilité du support commercial des frameworks Java Jun 05, 2024 pm 05:25 PM

L'évaluation du rapport coût/performance du support commercial pour un framework Java implique les étapes suivantes : Déterminer le niveau d'assurance requis et les garanties de l'accord de niveau de service (SLA). L’expérience et l’expertise de l’équipe d’appui à la recherche. Envisagez des services supplémentaires tels que les mises à niveau, le dépannage et l'optimisation des performances. Évaluez les coûts de support commercial par rapport à l’atténuation des risques et à une efficacité accrue.

Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage ? Comment la courbe d'apprentissage des frameworks PHP se compare-t-elle à celle d'autres frameworks de langage ? Jun 06, 2024 pm 12:41 PM

La courbe d'apprentissage d'un framework PHP dépend de la maîtrise du langage, de la complexité du framework, de la qualité de la documentation et du support de la communauté. La courbe d'apprentissage des frameworks PHP est plus élevée par rapport aux frameworks Python et inférieure par rapport aux frameworks Ruby. Par rapport aux frameworks Java, les frameworks PHP ont une courbe d'apprentissage modérée mais un temps de démarrage plus court.

Comment les options légères des frameworks PHP affectent-elles les performances des applications ? Comment les options légères des frameworks PHP affectent-elles les performances des applications ? Jun 06, 2024 am 10:53 AM

Le framework PHP léger améliore les performances des applications grâce à une petite taille et une faible consommation de ressources. Ses fonctionnalités incluent : une petite taille, un démarrage rapide, une faible utilisation de la mémoire, une vitesse de réponse et un débit améliorés et une consommation de ressources réduite. Cas pratique : SlimFramework crée une API REST, seulement 500 Ko, une réactivité élevée et un débit élevé.

Comparaison des performances des frameworks Java Comparaison des performances des frameworks Java Jun 04, 2024 pm 03:56 PM

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

'Black Myth: Wukong ' La version Xbox a été retardée en raison d'une 'fuite de mémoire', l'optimisation de la version PS5 est en cours 'Black Myth: Wukong ' La version Xbox a été retardée en raison d'une 'fuite de mémoire', l'optimisation de la version PS5 est en cours Aug 27, 2024 pm 03:38 PM

Récemment, "Black Myth : Wukong" a attiré une énorme attention dans le monde entier. Le nombre d'utilisateurs en ligne simultanés sur chaque plateforme a atteint un nouveau sommet. Ce jeu a connu un grand succès commercial sur plusieurs plateformes. La version Xbox de "Black Myth : Wukong" a été reportée. Bien que "Black Myth : Wukong" soit sorti sur les plateformes PC et PS5, il n'y a pas eu de nouvelles définitives concernant sa version Xbox. Il est entendu que le responsable a confirmé que "Black Myth : Wukong" serait lancé sur la plateforme Xbox. Cependant, la date précise de lancement n’a pas encore été annoncée. Il a été récemment rapporté que le retard de la version Xbox était dû à des problèmes techniques. Selon un blogueur concerné, il a appris grâce aux communications avec les développeurs et les « initiés Xbox » lors de la Gamescom que la version Xbox de « Black Myth : Wukong » existe.

Bonnes pratiques en matière de documentation du framework Golang Bonnes pratiques en matière de documentation du framework Golang Jun 04, 2024 pm 05:00 PM

La rédaction d'une documentation claire et complète est cruciale pour le framework Golang. Les meilleures pratiques incluent le respect d'un style de documentation établi, tel que le Go Coding Style Guide de Google. Utilisez une structure organisationnelle claire, comprenant des titres, des sous-titres et des listes, et fournissez la navigation. Fournit des informations complètes et précises, notamment des guides de démarrage, des références API et des concepts. Utilisez des exemples de code pour illustrer les concepts et l'utilisation. Maintenez la documentation à jour, suivez les modifications et documentez les nouvelles fonctionnalités. Fournir une assistance et des ressources communautaires telles que des problèmes et des forums GitHub. Créez des exemples pratiques, tels que la documentation API.

Comment choisir le meilleur framework Golang pour différents scénarios d'application Comment choisir le meilleur framework Golang pour différents scénarios d'application Jun 05, 2024 pm 04:05 PM

Choisissez le meilleur framework Go en fonction des scénarios d'application : tenez compte du type d'application, des fonctionnalités du langage, des exigences de performances et de l'écosystème. Frameworks Go courants : Gin (application Web), Echo (service Web), Fibre (haut débit), gorm (ORM), fasthttp (vitesse). Cas pratique : construction de l'API REST (Fiber) et interaction avec la base de données (gorm). Choisissez un framework : choisissez fasthttp pour les performances clés, Gin/Echo pour les applications Web flexibles et gorm pour l'interaction avec la base de données.

Feuille de route d'apprentissage du framework Java : meilleures pratiques dans différents domaines Feuille de route d'apprentissage du framework Java : meilleures pratiques dans différents domaines Jun 05, 2024 pm 08:53 PM

Feuille de route d'apprentissage du framework Java pour différents domaines : Développement Web : SpringBoot et PlayFramework. Couche de persistance : Hibernate et JPA. Programmation réactive côté serveur : ReactorCore et SpringWebFlux. Informatique temps réel : ApacheStorm et ApacheSpark. Cloud computing : AWS SDK pour Java et Google Cloud Java.

See all articles