尝试使用身份验证构建express电子邮件后端api

pbwdgjma  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(300)

因此,我有一个后端电子邮件api服务器认证的想法。现在我只关注其中的身份验证部分,这就是我需要一些帮助来充实:

const express = require('express');
const bodyParser = require('body-parser');
const expressSession = require("express-session");

const app = express();
app.use(bodyParser.json());
app.use(expressSession(session));

const handleAuth = (req, res, next) => {
if (!req.session.user_id) {
    res.status(200).send({ "authenticated": false, "username": null });
  } else {
    res.status(200).send({ "authenticated": true, "username": req.session.user_id });
  }
}

下面第一个路由器的主体将具有 username: String , password: String 以及 passwordConfirmation: String . 因此,我的目标是最终开发一个前端应用程序,将post请求发送到具有 username , password 以及 passwordConfirmation 将为用户注册一个新的用户帐户。

app.post('/auth/signup', (req, res) => {
  // Signs up for a new account with the
  // provided username
  res.status(422).send({ username: "Username already in use" });
  res.status(422).send({ username: "Username already in use", 
     password: "Must be between 4 and 20 characters", 
     passwordConfirmation: "Passwords must match" });
});

下面第二个路由器的主体将具有 username: String 和一个 password: String .

app.post('/auth/signin', (req, res) => {
  // Signs in with the provided username
});

下面第三个路由器的主体将有一个 username: String .

app.post('/auth/username', (req, res) => {
  // Checks to see if a username is 
  // already in use
});

第四个路由器将没有尸体。

app.get('/auth/signedin', handleAuth, (req, res) => {
  // Checks to see if the user is currently 
  // signed in
});

第五个路由器将有一个空对象 {} .

app.post('/auth/signout', (req, res) => {
  // Signs the user out
  res.status(200).send({}); 
});

不仅仅是逻辑,还有任何人可以帮忙的东西,例如,我想使用redis,但不确定它是否适合这种情况,除了它是一个内存数据存储,可以保存用户注册的电子邮件,并检查 username 是可用的。

qvtsj1bj

qvtsj1bj1#

特快专场https://www.npmjs.com/package/express-session 这个包裹可能对你有用。
然后,在您的注册路径中,您只需要将用户数据存储在您想要的任何位置,并存储已登录的用户,以便您的应用程序知道。

req.session.user = req.body.username

在登录路径中,您只需检查用户是否存在,然后再次存储已登录的用户。

req.session.user = req.body.username

在注销路径中,您只需删除会话的用户

req.session.user = undefined

要检查用户是否已登录,可以使用快速路由器

var routerLogged = express.Router();
routerLogged .use(function (req, res, next) {
    if (req.session.user) {
        //user logged in, everything ok
        next();
    } else {
       //user not logged in
        res.redirect("/auth/signin");
    }
});

你把路由器应用到任何需要登录用户的路由上

app.use("/user/personalData", routerLogged);
app.use("/whatever", routerLogged);
...

相关问题