登录事宜

♀尐吖头ヾ 提交于 2020-03-08 19:38:21

登录

通过Session保持登录状态

Express 这个框架中,默认不支持 SessionCookie
但是我们可以使用第三方中间件:express-session 来解决

  1. npm install express-session
  2. 配置 (一定要在 app.use(router) 之前)
  3. 使用
    当把这个插件配置好之后,我们就可以通过 req.session 来发访问和设置 Session 成员了
    添加 Session 数据:req.session.foo = 'bar'
    访问 Session 数据:req.session.foo
var session = require('express-session')
app.use(session({
  // 配置加密字符串,它会在原有加密基础之上和这个字符串拼起来去加密
  // 目的是为了增加安全性,防止客户端恶意伪造
  secret: '123',
  resave: false,
  saveUninitialized: false // 无论你是否使用 Session ,都默认直接给你分配一把钥匙
}))

登入

router.get('/login', function (req, res) {
  res.render('login.html')
})

router.post('/login', function (req, res) {
  // 1. 获取表单数据
  // 2. 查询数据库用户名密码是否正确
  // 3. 发送响应数据
  var body = req.body

  User.findOne({
    email: body.email,
    password: md5(md5(body.password))
  }, function (err, user) {
    if (err) {
      return res.status(500).json({
        err_code: 500,
        message: err.message
      })
    }
    
    // 如果邮箱和密码匹配,则 user 是查询到的用户对象,否则就是 null
    if (!user) {
      return res.status(200).json({
        err_code: 1,
        message: 'Email or password is invalid.'
      })
    }

    // 用户存在,登陆成功,通过 Session 记录登陆状态
    req.session.user = user

    res.status(200).json({
      err_code: 0,
      message: 'OK'
    })
  })
})

登出

router.get('/logout', function (req, res) {
  // 清除登陆状态
  req.session.user = null

  // 重定向到登录页
  res.redirect('/login')
})
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!