查询会话
本课属于 Coddy Node.js 学习旅程的“身份验证与安全”单元。第 9 课,共 24 课。
会话 ID 指向一个已存储的会话,而该会话指向一个账户。这个键本身不是用户名。在判断是谁发出请求之前,先解析这两层关联。
// tickets:{key: 'example-key', memberId: 7}
const ticket = tickets.find(t => t.key === receivedKey);
const member = ticket && members.find(m => m.id === ticket.memberId);如果任一查找没有结果,就不要返回用户。真实的会话 ID 是较长的随机值,因此其他人无法猜到;这里使用较短的键,方便查看它们之间的关联。接下来的项目使用 MongoDB 集合和 findOne 进行这两次查找,而不是使用数组。
挑战
简单在 exercise.js 中,使用提供的 sessions 和 users 数组。查找与 sid 对应的会话,然后查找 id 与该会话的 userId 匹配的用户。将 username 返回到 user 中;如果任一查找失败,则返回 null。
试试 GET /result?sid=key-a:{"user":"ada"}。像 ?sid=ada 这样的 username 不能证明任何事情,并且会返回 null。?sid=orphan 也会返回 null,因为对应的账户不存在。
亲手试试
const sessions = [
{ id: 'key-a', userId: 10 },
{ id: 'key-b', userId: 20 },
{ id: 'orphan', userId: 99 },
];
const users = [
{ id: 10, username: 'ada' },
{ id: 20, username: 'bo' },
];
export function exercise({ sid }) {
return { user: sid };
}
身份验证与安全中的所有课
自己练习: Express 在线编辑器