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