Como usar o JWT para executar uma operação simples de login

A autenticação de registro e login é muito importante para um site, não apenas pode proteger suas informações pessoais, mas também facilitar operações subseqüentes.

Insira a descrição da imagem aqui

01 Prefácio


Hoje vou falar com você sobre o nosso processo de login e registro. Sabemos que existem muitas situações para efetuar login. Por exemplo, você pode fazer login usando a senha da sua conta, pode fazer login usando um código de verificação e também pode fazer login usando uma conta de terceiros. Na verdade, o princípio é semelhante, basta verificar se sua conta é razoável Se as informações de login são válidas.

Mas este artigo é para você contar o mistério de usar um processo de login simples. De um modo geral, após o login bem-sucedido, o servidor retornará um token. Não pense que essa é uma string irracional. No começo, pensei nisso. De fato, as informações de nossa conta são salvas no token; somente após a operação de criptografia, podemos obtê-las após a descriptografia.

02 Preparação

Você pode não saber o que é o jwt no início. Simplificando, esta é uma versão criptografada das informações do usuário. Você pode criptografar sua conta ou descriptografá-la. Entenda isso, podemos usá-lo para fazer uma coisinha, estamos usando uma arquitetura simples como vue + jwt + node + mysql, podemos simplesmente escrever a operação de login na página vue, use o node para escrever um login A interface é suficiente.

Para cuidar da maioria dos amiguinhos, vou elaborar um pouco mais sobre o processo. Inicialmente, devemos instalar os dois plugins mysql e jsonwebtoken.Para maior comodidade, eu também instalei o express, o objetivo é facilitar a operação ao usar o roteamento.

Acesse o banco de dados
api.js文件
const mysql = require('mysql');
const sqlMap = require('./sqlMap');

//创建链接对象
const pool = mysql.createPool({
    host: 'xx.xx.xxx.xxx',
    user: 'root',
    port: 3306,
    password: 'xxxxxx',
    database: 'xxxxxx',
    multipleStatements: true    // 多语句查询
})
//写一个登录接口
module.exports = {
    login(req, res, next) {
      var username = req.query.username;
      var password = req.query.password;
      pool.getConnection((err, connection) => {
        var sql = sqlMap.login; //这里有一个sqlMap对象,用来写sql语句
        connection.query(sql,[username,password] ,(err, result) => {
            res.json(result);
            connection.release();
        })
      })
    },
    //接下来可以写更多的接口
}

Há também uma rota para escrever uma interface, ou seja, você se conectará ao banco de dados e consultará o banco de dados quando solicitar isso

router.js文件
const express = require('express');
const router = express.Router();
const api = require('./api'); //这里引入上面的文件

router.get('/login', (req, res, next) => {
  api.login(req, res, next);
});

//最后记得导出
module.exports = router;

Acima, ainda uso um objeto de um sqlMap, escrevemos um separadamente, apenas para conveniência futura, e o acoplamento é mais baixo e fácil de expandir.

var sqlMap = {
    login: 'select * from teacher where teacherName = ? and `password` = ?;',
}
//最后也记得要导出
module.exports = sqlMap;

Dessa forma, podemos usar esse objeto quando o introduzirmos no arquivo, o que também pode escrever muitas consultas de instrução SQL.

Dito isso, precisamos iniciar o serviço, e simplesmente iniciar um serviço que possa chamar todas as interfaces que escrevemos, este é um arquivo principal, que chamamos de arquivo index.js

const routerApi = require('./router');
const path = require('path');
const bodyParser = require('body-parser'); // post 数据解析
const express = require('express');
const app = express();

app.use(bodyParser.json());
// 后端api路由
app.use('/api', routerApi);

// 监听端口
app.listen(3000);
console.log('success listen at port:3000......');

Dessa forma, ouviremos a porta 3000 após o nó index.js. Nesse ponto, nosso serviço é iniciado e a parte do banco de dados será aberta.

Primeira página

Como explicação aqui, não precisamos escrever algumas páginas bonitas. Existem duas caixas de entrada. O Vue possui uma função de ligação de dados bidirecional, para que possamos obter facilmente o conteúdo da caixa de entrada e usar a senha da conta para passá-la. Faça uma consulta sql ao back-end. Que tal, é particularmente simples?

form: {
    username: "",
    password: "",
}

Por exemplo, em dados, armazenamos os dados da caixa de entrada dessa maneira: se você pode realizar algumas operações, como verificação, use a biblioteca de componentes elementui, encontrará um novo mundo. Não começará aqui.

Em seguida, escreva um método de login nos métodos para interagir com os dados de back-end.Aqui também é uma operação muito simples.

//在script标签下面引入:
//const jwt = require("jsonwebtoken");
//const secret = "your string"; //自己的密钥

login() {
      this.$axios
        .get("/api/login", {//请求的接口
          params: { username: form.username, password: form.password }//传递参数
        })
        .then(res => {
          if (res.data.length > 0) {//假如返回有数据就使用token加密一下
            const token = jwt.sign(
              {
                name: res.data[0]//这里就是数据库返回的用户相关的信息
              },
              secret,//这是一个密钥,可以使用你喜欢的字符串
              {
                expiresIn: 86400 //秒,到期时间,一天
              }
            );
            this.$store.commit("SET_TOKEN", token);//写入token
            this.$router.replace("home");//跳转到主页
          } else {
            this.$message.error("登录失败");
          }
        });
    }

Você pode ver que eu escrevi o token no vuex e o coloquei em sessionStorage, que é para gerenciá-lo em um estado global.Por exemplo, é muito prático exibir seu nome na página inicial e controlar as permissões no futuro. Você pode usar isso. $ Store.state.user para obter informações do usuário no futuro.

Insira a descrição da imagem aqui

Se você precisar usar dados do usuário em que possa analisar diretamente o token, escrevi aqui um campo extra para armazenar informações de nome e identidade do usuário por conveniência. Aqui para analisar os dados, usamos apenas o método de função que acompanha o jwt.O token é o token que você armazenou no global e o segredo é o que você usou para criptografia, para que possa ser analisado sem problemas.

//这里也要引入
//const jwt = require("jsonwebtoken");
//const secret = "your string"; //自己的密钥

jwt.verify(token, secret, function(err, decoded) {
        if (!err) {
          User.id = decoded.name.teacherId;
          User.username = decoded.name.teacherName;
        }
      });

04 Resumo


Neste artigo, eu falei apenas sobre como usar o jwt para executar uma operação simples de verificação de login, adequada para alguns estudantes brancos experimentarem, afinal, esse também é um dos pacotes npm mais usados. De fato, muitos tutoriais na Internet dizem como usar o jwt para verificação.Talvez você ache que um ponto de conhecimento tão simples precisa ser tão complicado? Na verdade, você não entende a dor no coração de Xiaobai. No começo, eu não sabia como usá-la. Também vi muitos detalhes sobre a realização e finalmente percebi.

De fato, meu artigo deve ser direcionado a alguns alunos com bases fracas.Eu entendo que eles querem fazer uma função simples, mas não sabem como escrever a dor.É o mesmo que o original. Não acho que seja legível se não entender os artigos de outras pessoas, embora não saiba se consigo entender todo mundo.

Devido à recente melhoria dos assuntos relacionados à graduação, não há muito tempo para ler e estudar, e a qualidade pode ser reduzida.No futuro, compartilharemos mais produtos secos com todos.

Insira a descrição da imagem aqui

Publicado 57 artigos originais · ganhou elogios 6 · vista 6419

Acho que você gosta

Origin blog.csdn.net/weixin_42724176/article/details/105199528
Recomendado
Clasificación