21xrx.com
2024-11-08 22:02:56 Friday
登录
文章检索 我的文章 写文章
Node.js 登录与注册
2023-07-07 11:51:22 深夜i     --     --
Node js 登录 注册 用户认证 数据库交互

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,逐渐成为前端开发人员的首选。在前端设备越来越多的情况下,使用 Node.js 构建登录和注册系统成为了一项必要的技能。

在构建登录和注册系统之前,我们需要一个能够处理 HTTP 请求的服务器。我们可以使用 Node.js 自带的 http 模块来创建一个本地服务器:


const http = require('http')

const server = http.createServer((request, response) => {

 response.writeHead(200,

  'Content-Type': 'text/plain'

 )

 response.end('Hello World\n')

})

server.listen(8080)

console.log('Server running at http://localhost:8080')

现在我们已经有了一个简单的 HTTP 服务器,接下来是实现用户注册和登录的核心部分。

### 用户注册

在用户注册过程中,我们需要收集用户的输入信息并将其保存在数据库中。这里我们使用 MongoDB 作为数据库。首先,我们需要安装 `mongodb` 和 `mongoose`:

shell

npm install mongodb mongoose

然后,在 Node.js 中创建连接到 MongoDB 的实例:


const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true })

接下来,我们需要定义一个用户模型:


const Schema = mongoose.Schema

const userSchema = new Schema(

 username: String)

const User = mongoose.model('User', userSchema)

现在我们已经定义了用户模型,接下来是处理注册请求的代码:


const createUser = async (username, password) => {

 const user = new User( username)

 await user.save()

}

http.createServer(async (req, res) => {

 if (req.method === 'POST') {

  let body = ''

  req.on('data', data => {

   body += data

  })

  req.on('end', async () => {

   const username = JSON.parse(body)

   await createUser(username, password)

   console.log(`User ${username} created`)

   res.end()

  })

 } else {

  res.statusCode = 404

  res.end()

 }

})

在这段代码中,我们使用 `async` 和 `await` 确保数据库操作完成再返回响应。

现在,我们已经可以实现用户注册功能了。

### 用户登录

与用户注册不同的是,用户登录需要验证密码是否正确。因此,我们需要对密码进行加密,以保证安全性。这里我们使用 `bcrypt` 库进行加密:

shell

npm install bcrypt

现在,我们可以使用以下代码实现用户登录:


const bcrypt = require('bcrypt')

const findUser = async (username, password) => {

 const user = await User.findOne({ username })

 if (!user) return false

 if (await bcrypt.compare(password, user.password))

  return true

  else

  return false

 

}

http.createServer(async (req, res) => {

 if (req.method === 'POST') {

  let body = ''

  req.on('data', data => {

   body += data

  })

  req.on('end', async () => {

   const password = JSON.parse(body)

   const found = await findUser(username, password)

   if (found) {

    console.log(`User ${username} logged in`)

    res.writeHead(302, { Location: '/homepage.html' })

   } else {

    console.log(`Invalid username or password`)

    res.writeHead(401)

   }

   res.end()

  })

 } else {

  res.statusCode = 404

  res.end()

 }

})

上述代码中,我们将密码与数据库中的加密密码进行比较,确保登录安全性。

通过上述代码,我们已经可以实现简单的登录和注册系统。当然,这只是一个基础的实现,实际情况中需要更加严谨的安全措施来保证用户信息的安全。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复