Nodejs Express登录验证

Nodejs Express登录验证

在cnode看到几年前有人分享使用Express时如何进行登录验证,分享一下我的做法

https://github.com/skipify/islogin

3 回复

Nodejs Express登录验证

在开发Web应用时,登录验证是一个非常重要的功能。本文将介绍如何使用Node.js和Express框架来实现一个简单的登录验证系统。

1. 安装必要的依赖

首先,确保你已经安装了Node.js和npm。然后,创建一个新的项目目录,并初始化一个新的Node.js项目:

mkdir express-login
cd express-login
npm init -y

接下来,安装Express和一些常用的中间件:

npm install express body-parser cookie-parser express-session

2. 创建基本的Express服务器

创建一个名为app.js的文件,并设置基本的Express服务器:

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const session = require('express-session');

const app = express();

// 使用中间件
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({
    secret: 'secret-key',
    resave: false,
    saveUninitialized: false
}));

// 模拟用户数据库
let users = [
    { username: 'admin', password: 'password' }
];

// 登录路由
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    const user = users.find(user => user.username === username && user.password === password);

    if (user) {
        req.session.user = user;
        res.send({ success: true });
    } else {
        res.send({ success: false });
    }
});

// 验证登录状态的中间件
const isLoggedIn = (req, res, next) => {
    if (req.session.user) {
        next();
    } else {
        res.status(401).send({ message: 'Unauthorized' });
    }
};

// 受保护的路由
app.get('/protected', isLoggedIn, (req, res) => {
    res.send({ message: 'Welcome to the protected route!' });
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

3. 测试登录验证

启动服务器后,你可以通过发送POST请求到/login来测试登录功能:

curl -X POST http://localhost:3000/login -d "username=admin&password=password"

如果登录成功,你会收到一个包含success: true的响应。接下来,尝试访问受保护的路由:

curl -X GET http://localhost:3000/protected

由于你已经登录,你应该能够访问该路由并收到一个欢迎消息。

4. 结论

以上代码展示了如何使用Express框架实现基本的登录验证。我们使用了express-session来管理会话,并通过中间件来保护某些路由。这种简单的方法可以满足大多数基本需求,但对于更复杂的应用,建议使用更安全的身份验证库,如Passport.js。

希望这篇教程对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言交流。


谢谢楼主分享,正好需要

在Node.js中使用Express进行登录验证通常涉及以下几个步骤:

  1. 安装必要的依赖:首先,确保你已经安装了expressexpress-sessionbcrypt等依赖库。你可以使用npm来安装这些库:

    npm install express express-session bcrypt jsonwebtoken
    
  2. 创建用户模型:定义一个用户模型来处理用户的注册和登录逻辑。

  3. 中间件处理登录验证:创建中间件来检查用户是否已登录。

以下是一个简单的示例,展示如何在Express应用中实现登录验证。

示例代码

安装依赖

npm install express express-session bcrypt jsonwebtoken

用户模型

const bcrypt = require('bcrypt');

class User {
  static async register(username, password) {
    const hashedPassword = await bcrypt.hash(password, 10);
    // 存储用户到数据库(这里仅作示例)
    return { username, password: hashedPassword };
  }

  static async login(username, password, users) {
    const user = users.find(user => user.username === username);
    if (user && await bcrypt.compare(password, user.password)) {
      return user;
    }
    return null;
  }
}

Express服务器

const express = require('express');
const session = require('express-session');
const app = express();

app.use(express.json());
app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true
}));

app.post('/register', async (req, res) => {
  try {
    const user = await User.register(req.body.username, req.body.password);
    res.status(201).json({ message: 'User registered successfully' });
  } catch (error) {
    res.status(500).json({ error: 'Failed to register user' });
  }
});

app.post('/login', async (req, res) => {
  try {
    const user = await User.login(req.body.username, req.body.password, [
      { username: 'test', password: '$2b$10$FQxL7mzVhXkZU5tYRyC3qO9JwX4Zf6gDkKZG6iAe0jM.' }
    ]);
    if (user) {
      req.session.user = user;
      res.json({ message: 'Login successful' });
    } else {
      res.status(401).json({ error: 'Invalid credentials' });
    }
  } catch (error) {
    res.status(500).json({ error: 'Failed to log in' });
  }
});

app.get('/protected', (req, res) => {
  if (req.session.user) {
    res.json({ message: 'Welcome, ' + req.session.user.username });
  } else {
    res.status(401).json({ error: 'Unauthorized' });
  }
});

app.listen(3000, () => console.log('Server running on port 3000'));

解释

  1. 用户模型:我们定义了一个简单的用户模型类,包含注册和登录方法。
  2. Express服务器:我们创建了一个Express应用,并添加了两个路由/register/login用于处理用户注册和登录。/protected路由需要用户已登录才能访问。
  3. 会话管理:我们使用express-session来管理用户会话,当用户成功登录后,我们将用户信息存储在会话中。

这样就完成了一个简单的基于会话的登录验证系统。

回到顶部