import * as express from 'express';
import * as uuid from 'uuid/v4';
import * as session from 'express-session';
import * as Memcached from 'memcached';
import * as memcached from 'connect-memcached';
const app = express();
const memcachedServer = new Memcached(`${MEMCACHED_HOST}:${MEMCACHED_PORT}`);
const MemcachedStore = memcached(session);
app.use(session({
genid: (req) => {
return uuid.v4().toString();
},
secret: SESSION_SECRET_KEY,
store : new MemcachedStore({
hosts: [`${MEMCACHED_HOST}:${MEMCACHED_PORT}`],
secret: MEMCACHED_SECRET_KEY
})
}));
app.get('/', function(req, res, next) {
let sessData = req.session;
sessData.someAttribute = "foo";
res.send('Returning with some text');
});
app.get('/bar', function(req, res, next) {
let someAttribute = req.session.someAttribute;
res.send(`This will print the attribute I set earlier: ${someAttribute}`);
});
app.get('/logout', function(req, res, next) {
req.session.destroy((error) => {
if (error) {
console.error(error);
}
});
});
Mалка част от данни, която се съхранява в браузъра на потребителя.
Наредена двойка име - стойност.
Имат определен живот.
import * as express from 'express';
import * as cookieParser from 'cookie-parser';
const app = express();
app.use(cookieParser());
app.get('/', function (req, res) {
const token = 'some token';
console.log('Cookies: ', req.cookies);
res.cookie('user', token, { maxAge: 60 * 60 * 24 * 30, httpOnly: true, secure: true });
res.setHeader('Set-Cookie', `user=${token};`);
res.send(token);
});
Оторизация - процес на предоставяне на възможност на някого за достъп до даден ресурс.
Автентикация - идентифициране на потребител.
Никога не трябва паролите да се съхраняват в чист вид, както в модела на данните, така и в самата база данни.
На даден низ съпоставят друг низ с фиксиран размер.
Хеширащите функции имат две важни свойства:
import * as bcrypt from 'bcrypt';
bcrypt.hash(user.password, 10, async (error: Error, hash: string) => {
await User.create(
{ username: user.username, password: hash, email: user.email },
(error: Error, newUser: IUser) => {
if (error) {
console.error(error);
}
});
});
import { Request, Response } from 'express';
import * as bcrypt from 'bcrypt';
import UserController from '../controllers/user-controller';
let controller = new UserController();
const auth = async (request: Request, response: Response, next: () => void) => {
const { username, password } = request.body;
const user = await controller.findUser(username);
if (user) {
bcrypt.compare(
password,
user.password,
(error: Error, result: boolean) => {
if (result) {
next();
} else {
response.status(401).send('Unauthorized');
}
});
}
}