Authentication and Authorization授权与验证

Authentication and Authorization

Introduction

目前已创建四个API: genres、movies、customers、rentals。

几乎所有的应用都需要进行认证和授权。其中

**认证(Authentication):**就是验证一个用户是不是它声明的身份的过程。我们把用户名和密码发给服务器,服务器验证我是不是那个人。

**授权(Authorization):**就是判断用户是否有做某件事情的权利,比如,在vidly程序中,我们只允许登陆成功的用户修改电影内容,或者是由管理员有删除权限。

为了达到这个效果,我们要新建两个终端。首先就是要让用户可以注册、登录

// Register: POST /api/users
// Login: POST /api/logins

Creating the User Model

首先定义User Model 新建models/user.js

// models/user.js

const mongoose = require("mongoose");
const Joi = require("joi");
const config = require("config");

const userSchema = new mongoose.Schema({
   
  name: {
   
    type: String,
    required: true,
    minlength: 5,
    maxlength: 50,
  },
  email: {
   
    type: String,
    unique: true,
    required: true,
    minlength: 5,
    maxlength: 255,
  },
  password: {
   
    type: String,
    required: true,
    unique: true,
    required: true,
    minlength: 5,
    maxlength: 1024,
  },
});

const User = mongoose.model("User", userSchema);

function validateUser(user) {
   
  const schema = Joi.object({
   
    name: Joi.string().min(5).max(50).required(),
    email: Joi.string().min(5).max(255).required().email(),
    password: Joi.string().min(5).max(255).required(),
  });

  return schema.validate(user);
}

exports.User = User;
exports.validate = validateUser;

这里Schema中email设定了unique为true,是为了保证数据库中不会有相同邮箱。

Registering Users

现在创建用于注册用户的新路由,新建routes/users.js

// routes/users.js
const {
    User, validate } = require("../models/user");
const mongoose = require("mongoose");
const express = require("express");
const router = express.Router();

router.post("/", async (req, res) => {
   
});

modules.exports = router;

然后回index.js把这个路由添加

// index.js
const users = require("./routes/users");
app.use("/api/users", users);

现在来具体实现路由规则。首先验证输入内容,不合法返回400,通过就创建新的用户。

router.post("/", async (req, res) => {
   
  const {
    error } = validate(req.body);
  if (error) return res.status(400).send(error.details[0].message);

  // Make sure the user is not already registered
  let user = await User.findOne({
    email: req.body.email });
  if (user) return res.status(400).send("User already registered.");

  user = new User({
   
      name: req.body.name,
      email
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值